Sé que este puede ser el más antiguo, pero me he metido en algo relacionado con este problema cuando lo usé InputTypey app:passwordToggleEnabled="true"juntos.
Entonces, escribir esto, ya que puede ayudar a alguien por aquí.
Quiero usar una fuente personalizada para el campo de contraseña junto con la app:passwordToggleEnabledopción para mi campo de entrada de contraseña. Pero en la biblioteca de soporte 27.1.1 (mientras escribía esto), se bloqueaba.
Entonces el código era como a continuación,
<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>
El código anterior no se ha inputTypedefinido en XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
Y en Java, setTransformationMethodme ayudará a adquirir las propiedades del textPasswordtipo de entrada y también estoy contento con mi estilo de fuente personalizado.
Pero el bloqueo mencionado a continuación ocurrió en todos los niveles de API con la biblioteca de soporte 27.1.1.
java.lang.NullPointerException: intento de invocar el método virtual 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' en una referencia de objeto nulo
Esto estaba fallando debido a la clase onRestoreInstanceStateinterna TextInputLayout.
Reproduzca pasos: cambie la visibilidad de la contraseña y minimice la aplicación y ábrala desde las aplicaciones recientes. Uh, ho se estrelló!
Todo lo que necesitaba es la opción de alternar contraseña predeterminada (usando la biblioteca de soporte) y la fuente personalizada en el campo de entrada de contraseña.
Después de un tiempo, descubierto haciendo lo siguiente,
<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, agregado 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
En el código de Java anterior,
Adquirí el tipo de letra personalizado del nombre de usuario EditTexty lo apliqué al TextInputLayoutcampo de contraseña. Ahora no necesita establecer el tipo de letra explícitamente en la contraseña, EditTextya que adquirirá la TextInputLayoutpropiedad.
Además, eliminé password.setTransformationMethod(new PasswordTransformationMethod());
Al hacer esto, passwordToggleEnabledestá funcionando, la fuente personalizada también se aplica y adiós al bloqueo. Espero que este problema se solucione en las próximas versiones de soporte.