Ich weiß , das die ältere sein kann , aber ich habe in etwas zu diesem Problem bucklige , wenn ich verwenden InputType
und app:passwordToggleEnabled="true"
zusammen.
Schreiben Sie dies, da es jemandem hier helfen kann.
Ich möchte ein benutzerdefiniertes Feld app:passwordToggleEnabled
fü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 inputType
in XML definiert
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
Und in Java setTransformationMethod
wird mir helfen, die Eigenschaften des textPassword
Eingabetyps 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 onRestoreInstanceState
inneren TextInputLayout
Klasse 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 EditText
und auf TextInputLayout
das Kennwortfeld angewendet . Jetzt müssen Sie die Schriftart nicht explizit auf das Kennwort festlegen, EditText
da sie die TextInputLayout
Eigenschaft erhält .
Auch habe ich entfernt password.setTransformationMethod(new PasswordTransformationMethod());
Auf diese Weise passwordToggleEnabled
funktioniert, wird auch die benutzerdefinierte Schriftart angewendet und tschüss auf den Absturz. Ich hoffe, dieses Problem wird in den kommenden Support-Versionen behoben.