Tôi biết đây có thể là cái cũ hơn nhưng tôi đã tìm hiểu một vài thứ liên quan đến vấn đề này khi tôi sử dụng InputType
và app:passwordToggleEnabled="true"
cùng nhau.
Vì vậy, viết điều này, vì nó có thể giúp ai đó ở đây.
Tôi muốn sử dụng một phông chữ tùy chỉnh cho trường mật khẩu cùng với app:passwordToggleEnabled
tùy chọn cho trường nhập mật khẩu của tôi. Nhưng trong thư viện hỗ trợ 27.1.1 (trong khi viết này), nó đã bị sập.
Vì vậy, mã như dưới đây,
<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>
Mã trên không inputType
được xác định trong XML
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
Và trong Java, setTransformationMethod
sẽ giúp tôi có được các thuộc tính của textPassword
kiểu đầu vào và tôi cũng hài lòng kiểu phông chữ tùy chỉnh của mình.
Nhưng sự cố được đề cập dưới đây đã xảy ra ở tất cả các cấp API với thư viện hỗ trợ 27.1.1.
java.lang.NullPulumException: Cố gắng gọi phương thức ảo 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)' trên tham chiếu đối tượng null
Điều này đã sụp đổ do lớp onRestoreInstanceState
bên trong TextInputLayout
.
Các bước tái tạo: Chuyển đổi khả năng hiển thị mật khẩu và thu nhỏ ứng dụng và mở từ các ứng dụng gần đây. Uh, ho Sụp đổ!
Tất cả những gì tôi cần là tùy chọn chuyển đổi mật khẩu mặc định (sử dụng thư viện hỗ trợ) và phông chữ tùy chỉnh trong trường nhập mật khẩu.
Sau một thời gian, tìm ra bằng cách làm như dưới đây,
<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>
Trong XML, đã thêm 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
Trong mã java ở trên,
Tôi đã có được kiểu chữ tùy chỉnh từ tên người dùng EditText
và áp dụng nó cho TextInputLayout
trường mật khẩu. Bây giờ bạn không cần phải đặt kiểu chữ rõ ràng cho mật khẩu EditText
vì nó sẽ có được thuộc TextInputLayout
tính.
Ngoài ra, tôi đã loại bỏ password.setTransformationMethod(new PasswordTransformationMethod());
Bằng cách này, passwordToggleEnabled
đang hoạt động, phông chữ tùy chỉnh cũng được áp dụng và tạm biệt sự cố. Hy vọng vấn đề này sẽ được khắc phục trong bản phát hành hỗ trợ sắp tới.