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());