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 库)...
<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 字体很简单,但最终结果对我来说并不是很好,请参阅我的
我在 android 应用程序中创建了一个表单。它看起来像这样。
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 库)...
<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 字体很简单,但最终结果对我来说并不是很好,请参阅我的