나는이 나이가 하나가 될 수 있습니다 알고 있지만, 나는 내가 사용하는 경우이 문제와 관련된 무언가로 숙일 한 InputType
과app:passwordToggleEnabled="true"
함께.
여기에 누군가 도움이 될 수 있으므로 이것을 작성하십시오.
비밀번호 입력란에 맞춤 글꼴을 사용하고 싶습니다. app:passwordToggleEnabled
비밀번호 입력 필드 옵션 . 그러나 27.1.1 (이 글을 쓰는 동안) 지원 라이브러리에서 충돌이 발생했습니다.
코드는 아래와 같습니다.
<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>
위의 코드는 inputType
XML로 정의 되지 않았습니다
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
그리고 Java에서는 setTransformationMethod
속성을 얻는 데 도움이됩니다.textPassword
입력 유형 사용자 정의 글꼴 스타일이 만족 스럽습니다.
그러나 아래 언급 된 충돌은 27.1.1 지원 라이브러리가있는 모든 API 수준에서 발생했습니다.
java.lang.NullPointerException : null 객체 참조에서 가상 메소드 'void android.support.design.widget.CheckableImageButton.setChecked (boolean)'을 호출하려고 시도했습니다.
onRestoreInstanceState
내부 TextInputLayout
클래스 로 인해 충돌이 발생했습니다 .
재현 단계 : 비밀번호 표시를 토글하고 앱을 최소화하고 최근 앱에서 엽니 다. 어, 호는 추락했다!
비밀번호 입력 필드에 기본 비밀번호 전환 옵션 (지원 라이브러리 사용)과 사용자 지정 글꼴 만 있으면됩니다.
얼마 후, 다음과 같이하여 알아 냈습니다.
<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>
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
위의 자바 코드에서
사용자 이름에서 사용자 정의 서체를 가져 EditText
와서 TextInputLayout
비밀번호 필드에 적용했습니다 . 이제 글자체를 암호 EditText
로 명시 적으로 설정할 필요가 없습니다 .TextInputLayout
속성 .
또한 제거했습니다 password.setTransformationMethod(new PasswordTransformationMethod());
이 방법 passwordToggleEnabled
으로 작동하면 사용자 정의 글꼴도 충돌에 적용됩니다. 이 문제가 향후 지원 릴리스에서 해결되기를 바랍니다.