android 代码设置EditText的hint字符




今天,简单讲讲android里如何在代码里设置


EditText的hint字符。



之前,我一般是直接在xml文件设置EditText 的hint字符,后来需要在代码里修改hint字符,发现自己居然不知道怎么实现,在网上搜索资料后,终于解决了这个问题。这里记录一下。


其实也很简单:


1.xml文件中设置Ediitext的提示文字

   android:hint="请输入"

2.xml文件中设置Ediitext的提示文字的颜色

   android:textHintColor="#fff"


3.代码实现改变Edittext提示的文字

et_name = (EditText) findViewById(R.id.et_name);
        SpannableString s = new SpannableString("你好呀 小美人");//这里输入自己想要的提示文字
        et_name.setHint(s);

其实et_name.setHint(s); 就可以设置hint的字符,可以直接传入String设置。


4.代码实现改变Edittext提示的文字的大

/**
     * EditText 控件
     *
     * @param hintContent hint 内容
     * @param hintSize    hint 内容size
     */
    public static void setEditTextHintSize(EditText editText, String hintContent, int hintSize) {
        // 设置hint字体大小
        SpannableString ss = new SpannableString(hintContent);
        AbsoluteSizeSpan ass = new AbsoluteSizeSpan(hintSize, true);
        ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        // 设置hint
        editText.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失
    }


这里就简单讲解了设置hing的代码,下面讲讲android里对于设置hint的源码。

TextView的源码(EditText继承自TextView), 发现了一些端倪,如下:

public final void setHint(CharSequence hint) {
    mHint = TextUtils.stringOrSpannedString(hint);
    if (mLayout != null) {
        checkForRelayout();
    }
    if (mText.length() == 0) {
        invalidate();
    }
    // Invalidate display list if hint is currently used
    if (mEditor != null && mText.length() == 0 && mHint != null) {
        mEditor.invalidateTextDisplayList();
    }
}


在方法的一开始就是对hint文本的转换.由于hint是CharSequence类型的, 说明有希望可以增加一些自定义属性, 我们再看TextUtils.stringOrSpannedString这个方法:

public static CharSequence stringOrSpannedString(CharSequence source) {
    if (source == null)
        return null;
    if (source instanceof SpannedString)
        return source;
    if (source instanceof Spanned)
        return new SpannedString(source);
    return source.toString();
}

那么问题来了,我们只要传入的hint是SpannedString或者Spanned类型,就可以保持文本的自定义属性了吗? 答案是肯定的! 直接上代码:

EditText editText = (EditText) rootView.findViewById(R.id.et);
// 新建一个可以添加属性的文本对象
SpannableString ss = new SpannableString("喝酒就要喝一斤!");
// 新建一个属性对象,设置文字的大小
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(8,true);
// 附加属性到文本
ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 设置hint
editText.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失

注意最后一步,一定要进行转换, 类型不对会被转换为String对象,这样自定义的额属性就会丢失.

以下是最终效果:

\


\


简单讲讲,其实setHint(CharSequence hint)代码首先判断传入的是不是SpannedString,如果是,就直接设置到EditText的界面上,也会保留SpannedString的效果,如果传入的是String或者Spanned,就会转成String设置到EditText,这样就只能使用默认效果。


android 代码设置EditText的hint字符就讲完了。


就这么简单。


  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值