我有EditText
有密码输入。我想要实现的是为密码点设置一个更大的符号。输入textSize属性是18sp(它应该保持这种方式,例如我不想改变文本大小本身),我希望子弹为22 sp。我试过的是:
用大圆圈符号覆盖转换:
public CharSequence getTransformation(CharSequence source, View view) {
PasswordTransformationMethod mt = PasswordTransformationMethod.getInstance();
Field dotField;
try {
dotField = PasswordTransformationMethod.class.getDeclaredField("DOT");
dotField.setAccessible(true);
dotField.set(null,'\u2b24'); // big circle.. not found in android fonts, uh-oh.
return mt.getTransformation(source,view);
} catch (Exception e) {
e.printStackTrace();
return super.getTransformation(source,view);
}
}
但是,Android字体中缺少有问题的符号。
要解决此问题,我尝试为edittext设置自定义SpannableFactory:
@Override
public Spannable newSpannable(CharSequence src) {
String masked = "", unmasked = "";
for (int i = 0; i < src.length(); i++) {
if (src.charAt(i) == DOT) {
masked += src.charAt(i);
} else {
unmasked += src.charAt(i);
}
}
debug("Masked: "+ masked+ "; unmasked: " + unmasked);
SpannableStringBuilder ssb = new SpannableStringBuilder(masked + unmasked);
Typeface customFont = null;
try {
customFont = Typeface.createFromAsset(context.getAssets(), "fonts/NotoSansSymbols-Regular.ttf");
} catch (Exception e) {
e.printStackTrace();
}
if (customFont != null) {
ssb.setSpan(new CustomTypefaceSpan(customFont),
0, masked.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
);
}
return ssb;
}
但这似乎不起作用(debug()调用被忽略,所以我假设这个代码永远不会被执行),所以我没有尝试设置StyleSpan来代替抛出文本大小而不改变符号
字体本身就存在,并且已加载,我可以为EditText设置它,但如果我这样做,显然输入字体也会改变,这是禁止的。
TL; DR:
是否有任何方法可以为EditText的部分文本设置自定义字体,或者添加具有默认符号缺失的字体,同时保留其他符号的原始字体,或者增加其大小密码输入点?