So che questo potrebbe essere il più vecchio, ma mi sono imbattuto in qualcosa di legato a questo problema quando ho usato InputType
e app:passwordToggleEnabled="true"
insieme.
Quindi, scrivendo questo, in quanto potrebbe aiutare qualcuno qui.
Voglio usare un carattere personalizzato per il campo password insieme app:passwordToggleEnabled
all'opzione per il campo di immissione della mia password. Ma nella libreria di supporto 27.1.1 (mentre scrivevo questo), stava andando in crash.
Quindi il codice era come sotto,
<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>
Il codice sopra non è stato inputType
definito in XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
E in Java, setTransformationMethod
mi aiuterà ad acquisire le proprietà del textPassword
tipo di input e sono contento del mio stile di carattere personalizzato.
Ma il crash di seguito riportato si è verificato in tutti i livelli API con la libreria di supporto 27.1.1.
java.lang.NullPointerException: tentativo di invocare il metodo virtuale "void android.support.design.widget.CheckableImageButton.setChecked (boolean)" su un riferimento a oggetto null
Questo stava andando in crash a causa della classe onRestoreInstanceState
interna TextInputLayout
.
Procedura di riproduzione: attiva la visibilità della password, riduci a icona l'app e apri dalle app recenti. Uh, ho schiantato!
Tutto ciò di cui avevo bisogno è l'opzione di attivazione della password predefinita (utilizzando la libreria di supporto) e il carattere personalizzato nel campo di immissione della password.
Dopo qualche tempo, capito facendo come di seguito,
<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, aggiunto 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
Nel codice java sopra,
Ho acquisito il carattere personalizzato dal nome utente EditText
e l'ho applicato al TextInputLayout
campo della password. Ora non è necessario impostare esplicitamente il carattere tipografico sulla password EditText
poiché acquisirà la TextInputLayout
proprietà.
Inoltre, ho rimosso password.setTransformationMethod(new PasswordTransformationMethod());
In questo modo, passwordToggleEnabled
funziona, viene applicato anche il carattere personalizzato e arrivederci allo schianto. Spero che questo problema venga risolto nelle prossime versioni dell'assistenza.