在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看着极不协调。但是两个EditText都没有特意设置过hint的字体啊···
经查,hint字体受EditText的text字体影响,即受android:typeface的影响。android:typeface有三个取值:“sans”,“serif”,“monospace”,而缺省的话普通EditText是Sans,想必密码框的缺省不同的原因。然后将两个EditText设置相同typeface,但是发现能正常改变帐号栏的hint字体,但是密码栏hint字体一直保持是monospace不变。
果断看源码,发现在EditText的初始化中有这么一段:
if (password) {
setTransformationMethod(PasswordTransformationMethod.getInstance());
typefaceIndex = MONOSPACE;
}
果然密码框初始化会强制设置字体为MONOSPACE,这样解决就简单了,在代码实现中加上:
idEdit.setTypeface(Typeface.SANS_SERIF);
passEdit.setTypeface(Typeface.SANS_SERIF);
还有一种方法:
passEdit.setTypeface(Typeface.DEFAULT);
passEdit.setTransformationMethod(new PasswordTransformationMethod());