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:尝试在空对象引用上调用虚拟方法“void android.support.design.widget.CheckableImageButton.setChecked(boolean)”
这是由于 onRestoreInstanceState
内部TextInputLayout
课程而崩溃的。
重现步骤:切换密码可见性并最小化应用程序并从最近的应用程序中打开。呃,ho 崩溃了!
我只需要默认密码切换选项(使用支持库)和密码输入字段中的自定义字体。
一段时间后,通过以下方式弄清楚,
<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
在上面的java代码中,
我从用户名中获取了自定义字体EditText
并将其应用于TextInputLayout
密码字段。现在您不需要将字体显式设置为密码EditText
,因为它将获取该TextInputLayout
属性。
另外,我删除了password.setTransformationMethod(new PasswordTransformationMethod());
通过这种方式,passwordToggleEnabled
正在工作,自定义字体也被应用并且再见到崩溃。希望这个问题将在即将发布的支持版本中得到解决。