平时我们在开发时经常会用到输入框,用户登录,验证码,反馈,文本输入等等。
一般都只会对hint提示做颜色上的设置,而他的字体大小是随着输入内容大小一致的。
1.需求
这次的需求,因为输入的手机号很大,但是提示文案大了后不好看,所以需要对hint字体单独设置。但是在sml中,是无法去设置hint字体大小的,那么就从代码入手
2.实现思路 SpannableString
3.实现代码:
val numberInput = loginDialog?.findViewById<AppCompatEditText>(R.id.numberInput)
val ss = SpannableString(getString(R.string.input_number))
val ass = AbsoluteSizeSpan(14, true)//设置字体大小
ss.setSpan(ass, 0, ss.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
numberInput?.setHint(ss)
4.知识扩展
EditText源码:setHint方法
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();
}
}
stringOrSpannedString方法
public static CharSequence stringOrSpannedString(CharSequence source) {
if (source == null)
return null;
if (source instanceof SpannedString)
return source;//在这儿可以看到,可以使用SpannedString
if (source instanceof Spanned)
return new SpannedString(source);
return source.toString();
}