Wiem, że to może być starszy, ale wpadłem na coś związanego z tym problemem, kiedy korzystałem InputType
i 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:passwordToggleEnabled
opcją 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ł inputType
zdefiniowany w XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
A w Javie setTransformationMethod
pomoże mi zdobyć właściwości textPassword
typu 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 onRestoreInstanceState
wewnę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 EditText
i zastosowałem go TextInputLayout
w polu hasła. Teraz nie musisz jawnie ustawiać kroju pisma na hasło, EditText
ponieważ będzie ono nabywało TextInputLayout
właściwość.
Usunąłem również password.setTransformationMethod(new PasswordTransformationMethod());
W ten sposób passwordToggleEnabled
dział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.