TextInputLayout 中的 InputType textpassword

InputType textpassword in TextInputLayout

我在 android 应用程序中创建了一个表单。它看起来像这样。 我想要的是所有提示中的文本外观保持一致。如果我使用 inputType = "textpassword" 它会产生确认密码的效果,这与其他视图不同(粗体)。字段密码也具有相同的输入类型,但编辑文本不在 textInputlayout 中。字段代码如下

1>密码字段

 <EditText
       android:id="@+id/registerPasswordEt"
       fontPath="fonts/Proxima_Nova_Light.ttf"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="Password *"
       android:fontFamily="sans-serif"
       android:textStyle="normal"
       android:inputType="textPassword"
       android:maxLines="1"
       android:nextFocusDown="@+id/registerConfirmPasswordEt" />

2> 确认密码

<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_confirm_password" 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/input_layout_password">

            <EditText
                android:id="@+id/registerConfirmPasswordEt"
                fontPath="fonts/Proxima_Nova_Light.ttf"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fontFamily="sans-serif"
                android:hint="Confirm Password ( must match password ) *"
                android:inputType="textPassword"
                android:maxLines="1"
                android:nextFocusDown="@+id/registerUserNameEt"
                android:textStyle="normal" />

        </android.support.design.widget.TextInputLayout>

3> 其他字段

<android.support.design.widget.TextInputLayout
                    android:id="@+id/input_layout_last_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <EditText
                        android:id="@+id/registerLastNameEt"
                        fontPath="fonts/Proxima_Nova_Light.ttf"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Last Name *"
                        android:inputType="textPersonName"
                        android:maxLines="1"
                        android:nextFocusDown="@+id/registerPasswordEt" />

                </android.support.design.widget.TextInputLayout>

我想要的是所有文本看起来都相似,我需要 TextInputLayout 来实现动画效果。有没有办法让文字看起来一样?

从 xml 文件的 editText 中删除 inputType,并在 java 代码中添加以下行:

EditText registerConfirmPasswordEt = (EditText) findViewById(R.id.registerConfirmPasswordEt_text);
registerConfirmPasswordEt.setTransformationMethod(new PasswordTransformationMethod());

我输入你的代码,它显示确认密码字段与其他字段相同...我在下面发布代码,如果我错了请纠正我(此代码中未使用 fontPath 库)...

Screenshot

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_confirm_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/inputLayout">

        <EditText
            android:id="@+id/registerConfirmPasswordEt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fontFamily="sans-serif"
            android:hint="Confirm Password ( must match password ) *"
            android:textColor="@color/white"
            android:inputType="textPassword"
            android:maxLines="1"
            android:nextFocusDown="@+id/registerUserNameEt"
            android:textStyle="normal" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_last_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/inputLayout">

        <EditText
            android:id="@+id/registerLastNameEt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Last Name *"
            android:inputType="textPersonName"
            android:maxLines="1"
            android:nextFocusDown="@+id/registerPasswordEt" />

    </android.support.design.widget.TextInputLayout>

问题是因为图书馆书法。当您在 TextInputLayout 中使用带有 inputtype textpassword 的书法库和 edittext 时,会出现上述问题。我找到的解决方案如下。

Typeface confirmPasswordFace = Typeface.createFromAsset(getAssets(), CalligraphyConfig.get().getFontPath());
        inputLayoutConfirmPassword.setTypeface(confirmPasswordFace);  // or Typeface.NORMAL or any other

        CalligraphyTypefaceSpan confrmPasswordTypefaceSpan = TypefaceUtils.getSpan(confirmPasswordFace);
        SpannableString spannableConfirmPasswordHint = new SpannableString("Confirm Password ( must match password ) *");
        spannableConfirmPasswordHint.setSpan(confrmPasswordTypefaceSpan, 0, spannableConfirmPasswordHint.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

        inputLayoutConfirmPassword.setHint(spannableConfirmPasswordHint);

问题不在图书馆书法。我尝试删除它并使用原生字体 xml*,但遇到同样的问题。

在我的案例中,受 SarojMjn 的启发,您可以使用此方法修复视图

public static  void fixHintTextInputLayoutForPassword(Context context, TextInputLayout password,CharSequence text){
    SpannableString spannableConfirmPasswordHint = new SpannableString(text);
    spannableConfirmPasswordHint.setSpan(ResourcesCompat.getFont(context, R.font.lato_light), 0, spannableConfirmPasswordHint.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    password.setHint(spannableConfirmPasswordHint);
    password.setTypeface(ResourcesCompat.getFont(context, R.font.lato_light));
}

迁移到本机 xml 字体很简单,但最终结果对我来说并不是很好,请参阅我的