解决这个问题有很多方法,但每种方法都有优缺点。下面是我的测试
我只面对这个字体问题在某些设备(列表在我的答案)时启用输入密码由
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
如果我使用android:inputType="textPassword",这个问题不会发生
我曾经尝试过
1)使用setTransformationMethod代替inputType
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
字体效果会很好
键盘显示不太好(只能显示文本,不能在文本上方显示数字)
2)使用字体。默认的
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);
键盘显示良好,
字体可能工作不太好。示例sans-serif-light是我的应用程序中所有视图的默认字体= setTypeface(Typeface.DEFAULT)后面的>,EditText字体在某些设备中仍然看起来不同
3)使用android:fontFamily="sans-serif"
对于一些设备,它会崩溃,检查我的答案在这里https://stackoverflow.com/a/52421199/5381331。字体看起来也不一样
我的解决方案
在setInputType之前缓存字体,然后重用它
Typeface cache = edtPassword.getTypeface();
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTypeface(cache);
测试
一些设备面临字体问题
小米A2 (8.0.1)
Pixel XL (8.1.0)
Sony Xperia Z5 Au (SOV32) (6.0)
箭NX (F-04G) (6.0.1)
京瓷(S2) (7.0)
一些设备不面临字体问题
三星S4 (SC-04E) (5.0.1)
三星Galaxy Node 5 (5.1.1)
三星S7 Edge (SM-G935F) (7.0)