Android:当我在EditText上应用密码types时,字体被改变
我使用FloatLabel库( https://github.com/weddingparty/AndroidFloatLabel )在用户开始在EditText Android中写入内容时添加一些animation。
我的问题是,当我将密码types应用到我的EditText时,字体似乎被改变。 我想保持与平常一样的字体。 (见图1)
但是当我添加下面的行来应用密码types时,提示的字体似乎被改变了!
pass.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
以下可能会帮你解决。
pass.setTypeface(user.getTypeface());
本质上它只是传递你的用户Typeface
段的Typeface
,并将其作为你的密码字段的Typeface
传递。
我在对话框API指南中find了这个解释。
提示:默认情况下,当您将EditText元素设置为使用
"textPassword"
inputtypes时,字体系列设置为等宽字体,因此您应将其字体系列更改为"sans-serif"
以使两个文本字段使用匹配的字体样式。
换句话说,可以用XML完成的修复如下:
<EditText android:id="@+id/password" android:inputType="textPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif" android:hint="@string/password"/>
你可以在你的activity中使用android:hit和setHitColor,它不会影响正常的input
回答这个问题可能迟了,但是我遇到了这个问题。 所以想到了这个答案。 我已经通过Implementing a CustomTextWatcher
来解决它。
这是片段
private class CustomTextWatcher implements TextWatcher { private EditText mEditText; public CustomTextWatcher(EditText e) { mEditText = e; mEditText.setTypeface(Typeface.DEFAULT); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { mEditText.setTypeface(Typeface.DEFAULT); } public void onTextChanged(CharSequence s, int start, int before, int count) { mEditText.setTypeface(Typeface.MONOSPACE); } public void afterTextChanged(Editable s) { if(s.length() <= 0){ mEditText.setTypeface(Typeface.DEFAULT); } else { mEditText.setTypeface(Typeface.MONOSPACE); } } }
这里是你如何在你的应用程序中使用它
EditText pin = (EditText) findViewById(R.id.pin); pin.addTextChangedListener(new CustomTextWatcher(pin));
出于某种原因,我不必设置转换方法,所以这可能是一个更好的解决scheme。 在MyActivity中:
EditText editText_password = findViewById(R.id.edittext); editText_password.setTransformationMethod(new PasswordTransformationMethod());