【问题标题】:InputType textpassword in TextInputLayoutTextInputLayout 中的 InputType textpassword
【发布时间】:2017-05-08 06:43:33
【问题描述】:

我在安卓应用中创建了一个表单。它看起来像这样。 我想要的是所有提示中的文本外观是一致的。如果我使用 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 来获得动画效果。有没有办法使文本外观相同?

【问题讨论】:

  • 尝试从确认密码字段中删除字体系列,因为您已经将字体应用于该编辑文本字段并签入 UI。
  • 我试过了,但它不起作用。正如您在图像中看到的那样,该字段以粗体显示,但其他(字体大小等)似乎很好。如果删除了包含editext的texinputlayout,则视图的行为符合预期,但我需要将它包含在textinputlayout中。

标签: android android-layout android-edittext android-xml android-textinputlayout


【解决方案1】:

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

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

【讨论】:

  • 只有在没有 textinputlayout 包围编辑文本时才有效。
  • 没有。我在许多具有 textinputlayout 的代码中都使用了它。它工作正常。
  • 不适合我。我里面有TextInputLayoutTextInputEditText
【解决方案2】:

我输入了您的代码,它显示的确认密码字段与其他字段相同...我在下面发布代码,请纠正我如果我错了(此代码中未使用 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>

【讨论】:

  • 感谢您的回复,我发现问题略有不同。我在下面的回答中提到了它们
  • 我刚刚发布了答案,请看一下。
【解决方案3】:

问题不在于图书馆的书法。我尝试删除它并使用本机字体 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 字体很简单,但在我的情况下最终结果并不是很好,请参阅我的 question

【讨论】:

    【解决方案4】:

    问题是因为图书馆的书法。当您在 TextInputLayout 中有输入类型 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2015-06-18
      • 2015-12-20
      相关资源
      最近更新 更多