Hint 是我们在 EditText 中常用的属性,它可以帮我们传达一些提示信息给用户,比如直观地告诉用户该 EditText 应该填写什么内容,或者应该符合什么格式等。
当然,有时候我们想要修改 Hint 的属性,来使界面更加友好,但实际上你会发现,Hint 默认属性可供我们修改的值并不多,这时候我们得想办法曲线救国。
Hint 的字体颜色
Hint 的默认颜色是灰色,具体值是多少我没有去了解,但有时候我们想修改 Hint 的颜色,Android 为我们提供了方法,我们可以直接调用属性来设置:
<EditText
...
android:textColorHint="@color/colorAccent" />
也可以在逻辑代码中动态设置:
editText.setHintTextColor(getResources().getColor(R.color.colorAccent));
Hint 的字体大小
Hint 的默认字体大小是跟随 EditText 的 TextSize 的,因此只需要设置 EditText 的字体大小即可。
<EditText
...
android:textSize="32sp" />
这也是最符合交互的一种写法。
当然,你也可能会遇到特别的需求,比如仅修改 Hint 的字体大小,而不修改 EditText 中用户键入的内容的字体大小,怎么办呢?
public void setEditTextHintTextSize(EditText editText, String hint, int hintTextSize) {
SpannableString spannableString = new SpannableString(hint);
AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(hintTextSize, true);
spannableString.setSpan(absoluteSizeSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(new SpannableString(spannableString));
}
我把它封装成一个方法,传入需要设置的 EditText、要显示的 Hint 内容和 Hint 的字体大小值。
首先新建一个可以添加属性的文本对象 SpannableString,然后再建一个属性对象 AbsoluteSizeSpan 来设置文本的字体大小,该对象传入两个参数进行初始化,第一个就是文本字体大小,单位是 px,但是众所周知,Android 开发中很少会使用 px 来衡量尺寸,因为它描述的屏幕上的物理像素,而由于各家手机使用的屏幕差异,在不同手机上显示的大小也各不相同,所以 Android 中常用 dp 来衡量距离,而用 sp 来衡量字体,因此在这里用 px 来衡量字体明显是不合理的,所以第二个参数用来确认是否使用 dip 作为衡量单位,dip 实际上也就是 dp,当该参数为 TRUE 时就表示使用 dip 作为衡量单位,不设置的话默认为 FALSE,也就是使用 px 作为衡量单位,所以我们一般都会将它设置为 TRUE,即使如此,dp 仍然不是一个衡量字体大小的好单位,详情可以参考『Android 中各尺寸单位的区别』一文。
接下来就是调用 SpannableString 的 setSpan() 方法,这个方法的参数在『Android 改变 TextView 内局部样式』中已经有了详细的介绍。最后就调用 EditText 的 setHint() 方法将这个文本对象设置进去,这里再次创建了一个 SpannableString 对象,实际上直接使用上方原有的 SpannableString 对象也是可以设置成功的,但是看到网上的技术博客中提到一定要进行转换,否则属性可能会消失,我暂未遇到属性消失的情况,所以可以自行斟酌。
