मुझे पता है कि यह पुराना हो सकता है, लेकिन मैंने इस मुद्दे से जुड़ी कुछ चीज़ों में गुनगुनाया है जब मैंने उपयोग किया था 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>
ऊपर कोड inputTypeXML में परिभाषित नहीं है
EditText password = (EditText) findViewById(R.id.password);
password.setTransformationMethod(new PasswordTransformationMethod());
और जावा में, setTransformationMethodमुझे के गुणों को प्राप्त करने में मदद करेगाtextPassword इनपुट प्रकार और साथ ही मैं अपनी कस्टम फ़ॉन्ट शैली से खुश हूं।
लेकिन 27.1.1 समर्थन पुस्तकालय के साथ सभी एपीआई स्तरों में नीचे वर्णित दुर्घटना हुई।
java.lang.NullPointerException: वर्चुअल विधि 'void android.support.design.widget.CheckableImageButton.setChecked (बूलियन)' को एक अशक्त ऑब्जेक्ट संदर्भ पर लागू करने का प्रयास करें
यह 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>
एक्सएमएल में, जोड़ा गया 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काम कर रहा है, कस्टम फ़ॉन्ट भी लागू है और दुर्घटना के लिए अलविदा। उम्मीद है कि यह मुद्दा आगामी समर्थन रिलीज में तय हो जाएगा।