Подтвердить что ты не робот

Android: Typeface изменяется, когда я применяю пароль Type on EditText

Я использую библиотеку 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

4b9b3361

Ответ 1

Следующие могут решить это для вас.

pass.setTypeface(user.getTypeface());

По сути, он просто передает Typeface поля вашего имени пользователя и передает его как поле Typeface для вашего пароля.


Я нашел объяснение этого в Руководстве API диалогов.

Совет: По умолчанию, когда вы устанавливаете элемент 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"/>

Ответ 2

вы можете использовать android: hit и setHitColor в своей деятельности, это не повлияет на нормальный вход

Ответ 3

Возможно, поздно ответить на этот вопрос, но я столкнулся с этой проблемой. Так что подумал, чтобы ответить на это. Я решил его 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

По какой-то причине мне не нужно было устанавливать метод преобразования, чтобы это могло быть лучшим решением. В MyActivity:

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