在android中如何在EditText中显示星号(*)代替具有inputtype作为textPassword的点?

anu*_*har 5 android android-edittext

我试图在展现asterisk (*)到位点的符号EditTextinputType作为textPassword.我遇到了要求使用setTransformationMethod()和实施的帖子PasswordTransformationMethod.但是我需要实现该类的哪种方法以及如何显示星号?还有其他办法吗?

谢谢

Eri*_*ric 9

我想你应该阅读文档.创建您的PasswordTransformationMethod类,并在该getTransformation()方法中,只返回一个字符串,*其长度与密码字段的内容相同.

我做了一些摆弄,并提出了一个匿名课程,这对我来说是一个充满了*s 的领域.我把它转换成了一个可用的类:

public class MyPasswordTransformationMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return new PasswordCharSequence(source);
    }

    private class PasswordCharSequence implements CharSequence {
        private CharSequence mSource;
        public PasswordCharSequence(CharSequence source) {
            mSource = source; // Store char sequence
        }
        public char charAt(int index) {
            return '*'; // This is the important part
        }
        public int length() {
            return mSource.length(); // Return default
        }
        public CharSequence subSequence(int start, int end) {
            return mSource.subSequence(start, end); // Return default
        }
    }
};

// Call the above class using this:
text.setTransformationMethod(new MyPasswordTransformationMethod());
Run Code Online (Sandbox Code Playgroud)

  • 实际上,从最后一个字符添加时起你可能只需要一个计时器(可以在`PasswordTransformationMethod`的`onTextChanged`方法中实现).如果该计时器已过期,则显示所有`*`s.否则,显示除`index == length - 1`之外的所有`*`s. (2认同)