概述
今天,简单讲讲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字符就讲完了。
就这么简单。
最后
以上就是快乐雪碧为你收集整理的android 代码设置EditText的hint字符的全部内容,希望文章能够帮你解决android 代码设置EditText的hint字符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复