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
对象也是可以设置成功的,但是看到网上的技术博客中提到一定要进行转换,否则属性可能会消失,我暂未遇到属性消失的情况,所以可以自行斟酌。