今天,简单讲讲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);// 设置hinteditText.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失

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

以下是最终效果:



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


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


就这么简单。


更多相关文章

  1. android代码审查工具---lint工具的使用
  2. Android(安卓)轻松实现语音朗读
  3. android 系统音乐播放器分析
  4. Xamarin android沉浸式状态栏
  5. 使用表格布局编写登录页面实例
  6. 处女男学Android(十二)---Android(安卓)菜单(Menu)详解与应用
  7. Android控件之TextView全解析
  8. Android基于OpenCV通过JNI识别并显示人脸位置
  9. Android之Merge及自定义属性attrs.xml使用

随机推荐

  1. Android(安卓)画图 擦除开发
  2. 菜鸟的安卓实习之路----关于EditText的最
  3. Android(安卓)APP开发文档模板
  4. Activity Task 栈及亲缘关系
  5. Visual Studio 跨平台开发实战--- Hello
  6. Android(安卓)EditText 输入完毕 点击空
  7. 用AutoCompleteTextView实现历史记录提示
  8. android线程通信利器——handler
  9. Android(安卓)实现书籍翻页效果----源码
  10. Android(安卓)Jetpack介绍