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);// 设置hinteditText.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失
注意最后一步,一定要进行转换, 类型不对会被转换为String对象,这样自定义的额属性就会丢失.
以下是最终效果:
简单讲讲,其实setHint(CharSequence hint)代码首先判断传入的是不是SpannedString,如果是,就直接设置到EditText的界面上,也会保留SpannedString的效果,如果传入的是String或者Spanned,就会转成String设置到EditText,这样就只能使用默认效果。
android 代码设置EditText的hint字符就讲完了。
就这么简单。
更多相关文章
- android代码审查工具---lint工具的使用
- Android(安卓)轻松实现语音朗读
- android 系统音乐播放器分析
- Xamarin android沉浸式状态栏
- 使用表格布局编写登录页面实例
- 处女男学Android(十二)---Android(安卓)菜单(Menu)详解与应用
- Android控件之TextView全解析
- Android基于OpenCV通过JNI识别并显示人脸位置
- Android之Merge及自定义属性attrs.xml使用