专栏首页Android小知识Android自定义TextView实现必填项前面的*号

Android自定义TextView实现必填项前面的*号

  • 在res目录下的values目录里新建一个xml文件,取名为attrs.xml,代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="RequiredTextView">
        <attr name="android:text" />
        <attr name="prefix" format="string|reference" />
        <attr name="prefix_color" format="color|reference" />
    </declare-styleable>
</resources>
  • 新建一个类继承TextView,代码如下所示:
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.support.annotation.Nullable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;
import android.widget.TextView;
 
 
public class RequiredTextView extends TextView {
 
    private String prefix = "*";
    private int prefixColor = Color.RED;
 
    public RequiredTextView(Context context) {
        super(context);
    }
 
    public RequiredTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }
 
    public RequiredTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }
 
    private void init(Context context, @Nullable AttributeSet attrs) {
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.RequiredTextView);
 
        prefix = ta.getString(R.styleable.RequiredTextView_prefix);
        prefixColor = ta.getInteger(R.styleable.RequiredTextView_prefix_color, Color.RED);
        String text = ta.getString(R.styleable.RequiredTextView_android_text);
        if (TextUtils.isEmpty(prefix)) {
            prefix = "*";
        }
        if (TextUtils.isEmpty(text)) {
            text = "";
        }
        ta.recycle();
        setText(text);
    }
 
    public void setText(String text) {
        Spannable span = new SpannableString(prefix + text);
        span.setSpan(new ForegroundColorSpan(prefixColor), 0, prefix.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        setText(span);
    }
 
}
  • 默认效果为前面是红色*
  • 可以通过我们写的attrs来自定义颜色和头部符号
  app:prefix="++"
  app:prefix_color="#FF6100"

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • android中使用Html渲染的方式实现必填项前面的*号示例

    项目的个人基本信息UI界面效果图如下,有一个红色的*号,并且跟它挨着的文字颜色不一样。简友们,你们是怎么实现的呢?我这里主要介绍一种有Html渲染的方式

    砸漏
  • Android项目实战(十):自定义倒计时的TextView

    听着music睡
  • ListView优化和列表首尾使用

    前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪些方法技巧来优化ListVi...

    分享达人秀
  • 自定义ArrayAdapter

    ListView用起来还是比较简单的,也是Android应用程序中最重要的一个组件,但其他ListView可以随你所愿,能够完成很多想要的精美列表,而这...

    分享达人秀
  • 自定义BaseAdapter

    在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用...

    分享达人秀
  • 利用BottomNavigationView实现底部标签栏

    在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择“New”——“Activity”——...

    用户4464237
  • 看代码学AndroidUI - Tab

    最近慢慢学习一点安卓,先看了些基础的,还处于很初级的阶段,平常都是面对弱类型的语言,python,js,现在看java突然有点不适应。 这里推荐郭神的《第一行代...

    Bob.Chen
  • Android布局优化三剑客:include+merge+ViewStub

    要解决这些痛点,我们可以请Android布局优化三剑客出码,它们分别是include、merge和ViewStub三个标签,现在我们就来认识认识它们吧。在此之前...

    Android技术干货分享
  • Android图文混排实现方式详解

    在使用TextView的时候,我们经常需要在TextView中进行图文混排,比如在QQ中聊天的消息中的表情,底部tab图标等。

    陈宇明
  • Android RecyclerView使用方法详解

    本文为大家分享了Android RecyclerView使用方法,供大家参考,具体内容如下

    砸漏
  • 常用控件之TextView全解析

    大家好!在前几篇文章里,我们详细介绍了Android中的常用布局,使大家对Android中的页面布局有了一定认识,而对于布局中使用的一些UI控件如Button、...

    下码看花
  • 【谷歌官方文档】1.1 建立第一个APP

    本小节介绍如何使用Android Studio或者是SDK Tools中的命令行来创建一个新的项目。

    吴延宝
  • Android之Bmob移动后端云服务器

    源码下载:http://download.csdn.net/download/jjhahage/10034519 PS:一般情况下,我们在写android程序的...

    cMusketeer
  • WIFI环境下Android手机和电脑通信

    前面已经写过一篇java实现最基础的socket网络通信,这篇和之前那篇大同小异,只是将客户端代码移植到手机中,然后获取本机IP的方法略有不同。 先讲一下本篇中...

    用户1215536
  • 2.ui

    六月的雨
  • Android 基础[花式实现底部导航栏之TabLayout]

    前文中我们已经简单介绍了BottomNavigationView实现选项卡页面的细节,接下来我们继续花式实现底部导航栏之旅,本片中主要是使用TabLayout实...

    小海编码日记
  • Android自定义TextView实现文字图片居中显示的方法

    最近有个需求是这样的,人民币的符号“¥”因为安卓手机系统的不一致导致符号不是完全一样,所以用美工的给的图片代替,考虑到用的地方比较多,所以想着写一个继承于线性布...

    砸漏
  • Menu

    在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)

    小小工匠
  • Android项目的目录结构

    这两天家里晚上断网,不能晚上写了,请各位读官见谅。上一次我们使用ADT创建了一个Android的HelloWorld项目,并且介绍了模拟器以及模拟器的配置,这节...

    飞雪无情

扫码关注云+社区

领取腾讯云代金券