Android中密码提示字体

260

当EditText处于密码模式时,提示似乎以不同的字体(Courier?)显示。我该如何避免这种情况?我希望提示与EditText非密码模式下显示相同的字体。

我当前的xml:

<EditText 
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:password="true"
android:singleLine="true" />

1
请注意,并非所有设备都会表现出这种行为。 "HTC One X @ 4.1.1" 会(等宽字体),而 "Samsung GT-7510 @4.0.4" 不会(相同字体)。 - Loda
1
在LeWa OS 4.2.2上表现相同。API太不一致了。 - ruX
仍然存在于棒棒糖中。 - Mightian
希望这个能行。你可以在这里检查我的答案:https://dev59.com/t2445IYBdhLWcg3wustT#40695930 - Dmila Ram
18个回答

0
我使用这个解决方案根据提示的可见性来切换字体类型。它类似于Joe的答案,但是扩展了EditText。
public class PasswordEditText extends android.support.v7.widget.AppCompatEditText {

    public PasswordEditText(Context context) {
        super(context);
    }

    public PasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        if (text.length() > 0) setTypeface(Typeface.MONOSPACE);
        else setTypeface(Typeface.DEFAULT);
    }

}

0

我找到了解决这个问题的可靠方法

最好的方法是创建一个自定义的editText,并将typeface的值保存为临时变量,然后应用InputType更改的方法,最后将temp typeface的值设置回editText。代码如下:

public class AppCompatPasswordEditText extends AppCompatEditText {


    public AppCompatPasswordEditText(Context context) {
        super(context);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        Typeface cache = getTypeface();

        if (!isInEditMode() && cache != null) {
            setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            setTypeface(cache);
        }
    }

}

0
一个可能有点奇怪的案例,但我进行了实验并发现:
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setTransformationMethod(new PasswordTransformationMethod());

改变提示的字体大小而不是字体本身!这仍然是一个不希望出现的效果。有趣的是,反向操作:

password.setTransformationMethod(new PasswordTransformationMethod());
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

保持相同的字体大小。


0

最近,我已经添加了一个可以切换等宽字体开启/关闭的功能到EditText扩展中,特别是对于密码,这可能会对一些人有所帮助。它不使用android:fontFamily,因此与小于16的版本兼容。


0

您也可以使用

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

一起

<android.support.v7.widget.AppCompatEditText/>

0
如果您正在将书法库与TextInputLayout和EditText结合使用,则以下代码可以很好地工作。
    EditText password = (EditText) findViewById(R.id.password);
    TextInputLayout passwordLayout = (TextInputLayout) findViewById(R.id.passwordLayout);

    Typeface typeface_temp = password.getTypeface();
    password.setInputType(InputType.TYPE_CLASS_TEXT |
            InputType.TYPE_TEXT_VARIATION_PASSWORD); 

    password.setTypeface(typeface_temp);
    passwordLayout.setTypeface(typeface_temp);

这没有修改我的提示字体。 - Rafael Ruiz Muñoz

-1

如何创建带提示的输入密码框,而不将其转换为 * 和默认字体!

在 XML 中:

android:inputType="textPassword"
android:gravity="center"
android:ellipsize="start"
android:hint="Input Password !."

在活动中:

inputPassword.setTypeface(Typeface.DEFAULT);

感谢:mango和rjrjr的见解:D。


-2

像上面那样,但要确保在XML中字段没有粗体样式,因为即使使用上述修复方法,它们也永远不会看起来相同!


2
不要说“以上”……事情随着时间而变化 :-) - ZaBlanc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接