Sei que esse pode ser o mais antigo, mas me deparei com algo relacionado a esse problema quando usei InputType
e app:passwordToggleEnabled="true"
juntos.
Então, escreva isso, pois pode ajudar alguém por aqui.
Quero usar uma fonte personalizada para o campo de senha, juntamente com a app:passwordToggleEnabled
opção para o meu campo de entrada de senha. Mas na biblioteca de suporte 27.1.1 (enquanto escrevia isso), estava travando.
Então o código era como abaixo,
<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>
O código acima não foi inputType
definido em XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
E em Java, setTransformationMethod
me ajudará a adquirir as propriedades do textPassword
tipo de entrada e também estou feliz com meu estilo de fonte personalizado.
Mas a falha mencionada abaixo ocorreu em todos os níveis da API com a biblioteca de suporte 27.1.1.
java.lang.NullPointerException: tentativa de chamar o método virtual 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' em uma referência de objeto nulo
Isso estava travando devido à classe onRestoreInstanceState
interna TextInputLayout
.
Reproduzir etapas: alterne a visibilidade da senha, minimize o aplicativo e abra-o nos aplicativos recentes. Uh, ho Crashed!
Tudo o que eu precisava é a opção de alternância de senha padrão (usando a biblioteca de suporte) e a fonte personalizada no campo de entrada de senha.
Depois de algum tempo, resolvi fazer o seguinte,
<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>
Em XML, adicionado 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
No código java acima,
Adquiri o tipo de letra personalizado do nome de usuário EditText
e o apliquei TextInputLayout
no campo de senha. Agora você não precisa definir o tipo de letra explicitamente para a senha, EditText
pois ela adquirirá a TextInputLayout
propriedade.
Além disso, eu removi password.setTransformationMethod(new PasswordTransformationMethod());
Dessa maneira, passwordToggleEnabled
está funcionando, a fonte personalizada também é aplicada e adeus à falha. Espero que esse problema seja corrigido nas próximas versões de suporte.