Ich weiß , das die ältere sein kann , aber ich habe in etwas zu diesem Problem bucklige , wenn ich verwenden InputTypeund app:passwordToggleEnabled="true"zusammen.
Schreiben Sie dies, da es jemandem hier helfen kann.
Ich möchte ein benutzerdefiniertes Feld app:passwordToggleEnabledfür die Schriftart zum Kennwort zusammen mit der Option für mein Kennworteingabefeld verwenden. In der Unterstützungsbibliothek 27.1.1 (während des Schreibens) stürzte sie jedoch ab.
Der Code war also wie folgt:
<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>
Der obige Code wurde nicht inputTypein XML definiert
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
Und in Java setTransformationMethodwird mir helfen, die Eigenschaften des textPasswordEingabetyps zu erlangen, und ich bin auch glücklich über meinen benutzerdefinierten Schriftstil.
Der unten erwähnte Absturz ereignete sich jedoch in allen API-Ebenen mit der 27.1.1-Unterstützungsbibliothek.
java.lang.NullPointerException: Versuch, die virtuelle Methode 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' für eine Nullobjektreferenz aufzurufen
Dies stürzte aufgrund der onRestoreInstanceStateinneren TextInputLayoutKlasse ab.
Schritte zum Reproduzieren: Schalten Sie die Kennwortsichtbarkeit um, minimieren Sie die App und öffnen Sie sie über die letzten Apps. Äh, ho abgestürzt!
Alles, was ich brauchte, war die Standardoption zum Umschalten des Passworts (mithilfe der Support-Bibliothek) und die benutzerdefinierte Schriftart im Passwort-Eingabefeld.
Nach einiger Zeit, wie unten herausgefunden,
<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>
In XML hinzugefügt 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
Im obigen Java-Code
Ich habe die benutzerdefinierte Schriftart vom Benutzernamen erhalten EditTextund auf TextInputLayoutdas Kennwortfeld angewendet . Jetzt müssen Sie die Schriftart nicht explizit auf das Kennwort festlegen, EditTextda sie die TextInputLayoutEigenschaft erhält .
Auch habe ich entfernt password.setTransformationMethod(new PasswordTransformationMethod());
Auf diese Weise passwordToggleEnabledfunktioniert, wird auch die benutzerdefinierte Schriftart angewendet und tschüss auf den Absturz. Ich hoffe, dieses Problem wird in den kommenden Support-Versionen behoben.