Android:当我在EditText上应用密码时更改字体

时间:2014-06-09 09:20:26

标签: android android-edittext typeface

我使用 FloatLabel 库(https://github.com/weddingparty/AndroidFloatLabel)在用户开始在EditText Android中编写内容时添加一些动画。

我的问题是,当我将密码类型应用于我的EditText时,字体似乎被更改了。我想保持正常的字体。 (见图1)

enter image description here

但是当我添加以下行来应用密码类型时,提示的字体似乎被改变了!

pass.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

enter image description here

6 个答案:

答案 0 :(得分:128)

以下内容可能会为您解决。

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"/>

答案 1 :(得分:4)

出于某种原因,我没有必要设置转换方法,因此这可能是更好的解决方案。 在MyActivity中:

  EditText editText_password = findViewById(R.id.edittext);
    editText_password.setTransformationMethod(new PasswordTransformationMethod());

答案 2 :(得分:1)

你可以在你的活动中使用android:hit和setHitColor,它不会影响正常输入

答案 3 :(得分:0)

回答这个问题可能会迟到但我遇到了这个问题。所以想回答这个问题。我已经通过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));

答案 4 :(得分:0)

在xml中将inputType设置为“文本”,

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

答案 5 :(得分:0)

另一种解决方案是仅在更改typeface之前保存inputType,然后再重新应用。奇怪的是,在inputType中设置xml时不会发生这种情况,而在以编程方式进行设置时会发生这种情况。

val typeface = editText.typeface
editText.inputType = inputType
editText.typeface = typeface