当用户开始在EditText Android中编写内容时,我使用FloatLabel库(https://github.com/weddingparty/AndroidFloatLabel)添加一些动画。
我的问题是,当我将密码类型应用于我的EditText时,字体似乎被更改。我想保持正常的字体。 (见图1)
但是当我添加以下行来应用密码类型时,提示的字体似乎被改变了!
pass.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
以下可能会为您解决。
pass.setTypeface(user.getTypeface());
基本上它只是传递你的用户名字段的Typeface
并将其作为密码字段的Typeface
传递。
我在Dialogs API Guide找到了解释。
提示:默认情况下,当您将EditText元素设置为使用
"textPassword"
输入类型时,字体系列将设置为等宽字体,因此您应将其字体系列更改为"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"/>
出于某种原因,我没有必要设置转换方法,因此这可能是一个更好的解决方案。在MyActivity中:
EditText editText_password = findViewById(R.id.edittext);
editText_password.setTransformationMethod(new PasswordTransformationMethod());
你可以在你的活动中使用android:hit和setHitColor,它不会影响正常输入
回答这个问题可能为时已晚,但我遇到了这个问题。所以想回答这个问题。我已经通过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));
在xml中将inputType设置为“text”,
<EditText
android:id="@+id/edtPassword"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:inputType="text"/>
然后将活动中的EditText设为
mEdtConfirmPassword = findViewById(R.id.edtPassword);
mEdtConfirmPassword.setTransformationMethod(new PasswordTransformationMethod());