Sé que este puede ser el más antiguo, pero me he metido en algo relacionado con este problema cuando lo usé InputType
y 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:passwordToggleEnabled
opció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 inputType
definido en XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
Y en Java, setTransformationMethod
me ayudará a adquirir las propiedades del textPassword
tipo 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 onRestoreInstanceState
interna 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 EditText
y lo apliqué al TextInputLayout
campo de contraseña. Ahora no necesita establecer el tipo de letra explícitamente en la contraseña, EditText
ya que adquirirá la TextInputLayout
propiedad.
Además, eliminé password.setTransformationMethod(new PasswordTransformationMethod());
Al hacer esto, passwordToggleEnabled
está 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.