android密码字段问题,没有隐藏最后输入的字符

时间:2011-06-15 15:27:49

标签: android android-edittext

在Android中,我创建了一个密码字段:

    EditText text = new EditText(context);
    text.setTransformationMethod(PasswordTransformationMethod.getInstance());

或者像这样,这似乎做同样的事情:

    EditText text = new EditText(context);
    text.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

我得到一个不错的密码字段,除了用户输入的最后一个字符。它在屏幕上可见几秒钟,然后被一个点掩盖。

以下是截图: enter image description here

你知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:10)

这是预期的行为。使用大多数设备上的软键盘,正确输入密码是有价值的反馈。

有关您可以指定的所有不同inputType的列表以及它们如何更改EditText,

请参阅android inputTypes

此外,可以通过实施自己的TransformationMethod并通过setTransformationMethod()进行设置来更改此行为,但我不建议这样做。用户会期望您看到的行为,通过更改您的应用,您将提供不一致的用户体验。

还要检查此android article

答案 1 :(得分:9)

实现TransformationMethod以隐藏输入密码的最后一个字符:

public class LoginActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // example of usage
    ((TextView) findViewById(R.id.password)).setTransformationMethod(new HiddenPassTransformationMethod());
}

private class HiddenPassTransformationMethod implements TransformationMethod {

    private char DOT = '\u2022';

    @Override
    public CharSequence getTransformation(final CharSequence charSequence, final View view) {
        return new PassCharSequence(charSequence);
    }

    @Override
    public void onFocusChanged(final View view, final CharSequence charSequence, final boolean b, final int i,
                               final Rect rect) {
        //nothing to do here
    }

    private class PassCharSequence implements CharSequence {

        private final CharSequence charSequence;

        public PassCharSequence(final CharSequence charSequence) {
            this.charSequence = charSequence;
        }

        @Override
        public char charAt(final int index) {
            return DOT;
        }

        @Override
        public int length() {
            return charSequence.length();
        }

        @Override
        public CharSequence subSequence(final int start, final int end) {
            return new PassCharSequence(charSequence.subSequence(start, end));
        }
    }
}
}

答案 2 :(得分:1)

在需要实现pin-code类型的用户界面后,我遇到了这个问题。在用户输入1个数字(EditTexts和PIN号码之间的1:1关系,总共4个EditTexts)之后,密码将保持“打开”状态。我的解决方案是实现一个TextTatcher,用输入项目代替输入。(/)。

See the full answer here