Je sais que c'est peut-être le plus ancien, mais je suis tombé sur quelque chose en rapport avec ce problème lorsque j'ai utilisé InputType
et app:passwordToggleEnabled="true"
ensemble.
Donc, écrivez ceci, car cela peut aider quelqu'un ici.
Je veux utiliser une police personnalisée pour le champ de mot de passe ainsi qu'une app:passwordToggleEnabled
option pour mon champ de saisie de mot de passe. Mais dans la bibliothèque de support 27.1.1 (lors de l'écriture), elle plantait.
Donc, le code était comme ci-dessous,
<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>
Le code ci-dessus n'a pas inputType
défini en XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
Et en Java, setTransformationMethod
cela m'aidera à acquérir les propriétés du textPassword
type d'entrée et je suis également satisfait de mon style de police personnalisé.
Mais le crash mentionné ci-dessous s'est produit à tous les niveaux d'API avec la bibliothèque de support 27.1.1.
java.lang.NullPointerException: tentative d'appeler la méthode virtuelle 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' sur une référence d'objet null
Cela plantait à cause de la classe onRestoreInstanceState
interne TextInputLayout
.
Reproduire les étapes: basculez la visibilité du mot de passe et réduisez l'application et ouvrez-la à partir des applications récentes. Euh, ho Crashed!
Tout ce dont j'avais besoin est une option de bascule de mot de passe par défaut (en utilisant la bibliothèque de support) et une police personnalisée dans le champ de saisie du mot de passe.
Après un certain temps, compris en faisant comme ci-dessous,
<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>
En XML, ajouté 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
Dans le code java ci-dessus,
J'ai acquis la police de caractères personnalisée du nom d'utilisateur EditText
et l' ai appliquée au TextInputLayout
champ de mot de passe. Désormais, vous n'avez plus besoin de définir explicitement la police de caractères sur le mot EditText
de passe car elle acquiert la TextInputLayout
propriété.
Aussi, j'ai supprimé password.setTransformationMethod(new PasswordTransformationMethod());
De cette façon, passwordToggleEnabled
fonctionne, la police personnalisée est également appliquée et bye-bye au crash. J'espère que ce problème sera résolu dans les prochaines versions de support.