Текстовый пароль InputType в TextInputLayout

Я создал форму в приложении для Android. Это выглядит примерно так. Screenshot Я хочу, чтобы внешний вид текста во всех подсказках был последовательным. Если я использую inputType = "textpassword", это дает эффект подтверждения пароля, который отличается (выделен жирным шрифтом) от другого представления. Поле пароля также имеет тот же тип ввода, но текст редактирования не находится внутри textInputlayout. Код для полей выглядит следующим образом

1>поле пароля

 <EditText
       android:id="@+id/registerPasswordEt"
       fontPath="fonts/Proxima_Nova_Light.ttf"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="Password *"
       android:fontFamily="sans-serif"
       android:textStyle="normal"
       android:inputType="textPassword"
       android:maxLines="1"
       android:nextFocusDown="@+id/registerConfirmPasswordEt" />

2> Подтвердите пароль

<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_confirm_password" 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/input_layout_password">

            <EditText
                android:id="@+id/registerConfirmPasswordEt"
                fontPath="fonts/Proxima_Nova_Light.ttf"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fontFamily="sans-serif"
                android:hint="Confirm Password ( must match password ) *"
                android:inputType="textPassword"
                android:maxLines="1"
                android:nextFocusDown="@+id/registerUserNameEt"
                android:textStyle="normal" />

        </android.support.design.widget.TextInputLayout>

3> Другое поле

<android.support.design.widget.TextInputLayout
                    android:id="@+id/input_layout_last_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/registerLastNameEt"
                        fontPath="fonts/Proxima_Nova_Light.ttf"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Last Name *"
                        android:inputType="textPersonName"
                        android:maxLines="1"
                        android:nextFocusDown="@+id/registerPasswordEt" />

                </android.support.design.widget.TextInputLayout>

Я хочу, чтобы все тексты выглядели одинаково, и мне нужен TextInputLayout для эффектов анимации. Есть ли способ сделать текст таким же?


person SarojMjn    schedule 08.05.2017    source источник
comment
Попробуйте удалить семейство шрифтов из поля подтверждения пароля, так как вы уже применили шрифт к этому полю edittext и проверьте пользовательский интерфейс.   -  person Bhavnik    schedule 08.05.2017
comment
Я пробовал это, но это не работает. Как вы видите на изображении, в поле есть подсказка, выделенная жирным шрифтом, но другие (размер шрифта и т. Д.), Кажется, в порядке. Если texinputlayout, заключающий в скобки редактируемый текст, удален, представление ведет себя так, как ожидалось, но мне нужно, чтобы оно было заключено в скобки textinputlayout.   -  person SarojMjn    schedule 09.05.2017


Ответы (4)


Удалите inputType из editText из XML-файла и добавьте следующую строку в свой код Java:

EditText registerConfirmPasswordEt = (EditText) findViewById(R.id.registerConfirmPasswordEt_text);
registerConfirmPasswordEt.setTransformationMethod(new PasswordTransformationMethod());
person R.R.M    schedule 08.05.2017
comment
Это работает, только если у вас нет textinputlayout, заключенного в скобки edittext. - person SarojMjn; 09.05.2017
comment
Нет. Я использовал его во многих своих кодах с textinputlayout. Это работает нормально. - person R.R.M; 09.05.2017
comment
Не работал для меня. У меня внутри TextInputLayout и TextInputEditText. - person Azizjon Kholmatov; 03.12.2019

Я помещаю ваш код, и он показывает поле подтверждения пароля так же, как и другие поля... Я публикую код ниже, поправьте меня, если я ошибаюсь (библиотека fontPath не используется в этом коде)...

Скриншот

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_confirm_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/inputLayout">

        <EditText
            android:id="@+id/registerConfirmPasswordEt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fontFamily="sans-serif"
            android:hint="Confirm Password ( must match password ) *"
            android:textColor="@color/white"
            android:inputType="textPassword"
            android:maxLines="1"
            android:nextFocusDown="@+id/registerUserNameEt"
            android:textStyle="normal" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_last_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/inputLayout">

        <EditText
            android:id="@+id/registerLastNameEt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Last Name *"
            android:inputType="textPersonName"
            android:maxLines="1"
            android:nextFocusDown="@+id/registerPasswordEt" />

    </android.support.design.widget.TextInputLayout>
person Bhavnik    schedule 09.05.2017
comment
Спасибо за ответ, я обнаружил, что проблема немного отличается. Я упомянул их в своем ответе ниже - person SarojMjn; 09.05.2017
comment
Я только что опубликовал ответ, пожалуйста, посмотрите. - person SarojMjn; 09.05.2017

Дело не в библиотечной каллиграфии. Я попытался удалить его и использовать собственный шрифт xml *, но у меня та же проблема.

В моем случае, вдохновленном SarojMjn, привет, исправьте вид, используя этот метод.

public static  void fixHintTextInputLayoutForPassword(Context context, TextInputLayout password,CharSequence text){
    SpannableString spannableConfirmPasswordHint = new SpannableString(text);
    spannableConfirmPasswordHint.setSpan(ResourcesCompat.getFont(context, R.font.lato_light), 0, spannableConfirmPasswordHint.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    password.setHint(spannableConfirmPasswordHint);
    password.setTypeface(ResourcesCompat.getFont(context, R.font.lato_light));
}

переход на собственный шрифт xml был простым, но конечный результат в моем случае не очень хорош, см. мой вопрос

person Gianluca Musa    schedule 08.02.2018

Проблема связана с библиотечной каллиграфией. Вышеупомянутая проблема возникает, когда у вас есть библиотека каллиграфии и текст редактирования с текстовым паролем inputtype внутри TextInputLayout. Решение, которое я нашел, заключается в следующем.

Typeface confirmPasswordFace = Typeface.createFromAsset(getAssets(), CalligraphyConfig.get().getFontPath());
        inputLayoutConfirmPassword.setTypeface(confirmPasswordFace);  // or Typeface.NORMAL or any other

        CalligraphyTypefaceSpan confrmPasswordTypefaceSpan = TypefaceUtils.getSpan(confirmPasswordFace);
        SpannableString spannableConfirmPasswordHint = new SpannableString("Confirm Password ( must match password ) *");
        spannableConfirmPasswordHint.setSpan(confrmPasswordTypefaceSpan, 0, spannableConfirmPasswordHint.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

        inputLayoutConfirmPassword.setHint(spannableConfirmPasswordHint);
person SarojMjn    schedule 09.05.2017