Wiem, że to może być starszy, ale wpadłem na coś związanego z tym problemem, kiedy korzystałem InputTypei app:passwordToggleEnabled="true"razem.
Pisząc to, może to komuś pomóc.
Chcę użyć niestandardowej czcionki do pola hasła wraz z app:passwordToggleEnabledopcją dla mojego pola wprowadzania hasła. Ale w 27.1.1 (podczas pisania tego) biblioteki wsparcia, zawiesił się.
Więc kod był jak poniżej,
<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>
Powyższy kod nie został inputTypezdefiniowany w XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
A w Javie setTransformationMethodpomoże mi zdobyć właściwości textPasswordtypu wejściowego, a także cieszę się z mojego niestandardowego stylu czcionki.
Ale wspomniana poniżej awaria zdarzyła się na wszystkich poziomach API z biblioteką wsparcia 27.1.1.
java.lang.NullPointerException: Próba wywołania metody wirtualnej „void android.support.design.widget.CheckableImageButton.setChecked (boolean)” w odwołaniu do obiektu o wartości null
To się zawiesiło z powodu klasy onRestoreInstanceStatewewnętrznej TextInputLayout.
Odtwórz kroki: Przełącz widoczność hasła i zminimalizuj aplikację i otwórz ją z najnowszych aplikacji. Uh, ho rozbił się!
Potrzebuję tylko domyślnej opcji przełączania hasła (przy użyciu biblioteki pomocy) i niestandardowej czcionki w polu wprowadzania hasła.
Po pewnym czasie zorientowałem się, wykonując poniższe czynności,
<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>
Dodano w XML 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
W powyższym kodzie java
Zdobyłem niestandardowy krój pisma od nazwy użytkownika EditTexti zastosowałem go TextInputLayoutw polu hasła. Teraz nie musisz jawnie ustawiać kroju pisma na hasło, EditTextponieważ będzie ono nabywało TextInputLayoutwłaściwość.
Usunąłem również password.setTransformationMethod(new PasswordTransformationMethod());
W ten sposób passwordToggleEnableddziała, niestandardowa czcionka jest również stosowana i do widzenia do awarii. Mam nadzieję, że ten problem zostanie naprawiony w nadchodzących wersjach pomocy technicznej.