Я знаю, что это может быть более старый, но я столкнулся с чем-то связанным с этой проблемой, когда я использовал InputType
и app:passwordToggleEnabled="true"
вместе.
Итак, пишите это, так как это может помочь кому-то здесь.
Я хочу использовать пользовательский шрифт в поле пароля вместе с app:passwordToggleEnabled
опцией для моего поля ввода пароля. Но в 27.1.1 (при написании этой) библиотеки поддержки она вылетала.
Таким образом, код был как ниже,
<android.support.design.widget.TextInputLayout
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/_10dp"
android:layout_marginTop="@dimen/_32dp"
android:hint="@string/current_password"
android:textColorHint="@color/hint_text_color"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/black">
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start|left"
android:maxLines="1"
android:textAlignment="viewStart"
android:textColor="@color/black"
android:textColorHint="@color/camel"
android:textSize="@dimen/txt_16sp"
app:font_style="regular"
app:drawableEnd="@drawable/ic_remove_eye" />
</android.support.design.widget.TextInputLayout>
Выше код не inputType
определен в XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
И в Java, setTransformationMethod
поможет мне приобрести свойства типа textPassword
ввода, а также я рад, что мой собственный стиль шрифта.
Но нижеупомянутый сбой произошел на всех уровнях API с библиотекой поддержки 27.1.1.
java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' для ссылки на пустой объект
Это было сбой из-за onRestoreInstanceState
внутреннего TextInputLayout
класса.
Воспроизвести шаги. Переключите видимость пароля, сверните приложение и откройте его из последних приложений. Ой, хо разбился!
Все, что мне нужно, это опция переключения пароля по умолчанию (с помощью библиотеки поддержки) и пользовательский шрифт в поле ввода пароля.
Через некоторое время разобрался, сделав, как показано ниже,
<android.support.design.widget.TextInputLayout
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/_10dp"
android:layout_marginTop="@dimen/_32dp"
android:hint="@string/current_password"
android:textColorHint="@color/hint_text_color"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/black">
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start|left"
android:maxLines="1"
android:textAlignment="viewStart"
android:textColor="@color/black"
android:textColorHint="@color/camel"
android:textSize="@dimen/txt_16sp"
app:font_style="regular"
app:drawableEnd="@drawable/ic_remove_eye"
android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout>
В XML добавлено android:inputType="textPassword"
TextInputLayout inputPassword = findViewById(R.id.input_password);
EditText password = findViewById(R.id.password);
EditText userName = findViewById(R.id.user_name);
// Get the typeface of user name or other edit text
Typeface typeface = userName.getTypeface();
if (typeface != null)
inputLayout.setTypeface(typeface); // set to password text input layout
В приведенном выше коде Java,
Я получил пользовательский шрифт от имени пользователя EditText
и применил его к TextInputLayout
полю пароля. Теперь вам не нужно явно устанавливать гарнитуру для пароля, так EditText
как он получит TextInputLayout
свойство.
Также я удалил password.setTransformationMethod(new PasswordTransformationMethod());
Таким образом, passwordToggleEnabled
работает, пользовательский шрифт также применяется и до свидания до сбоя. Надеюсь, что эта проблема будет исправлена в следующих выпусках поддержки.