我想创建一个接受密码的
EditText
。我想在输入字符后立即隐藏该字符。所以我尝试实现 TransformationMethod
接口。
我对此很陌生。我尝试了以下代码:
EditText editText = (EditText) findViewById(R.id.editText);
editText.setTransformationMethod(new PasswordTransformationMethod());
private class PasswordTransformationMethod implements TransformationMethod {
@Override
public CharSequence getTransformation(CharSequence source, View view) {
return "/";
}
@Override
public void onFocusChanged(View view, CharSequence source, boolean focused, int direction, Rect previouslyFocusedRect) {
source = getTransformation(source, view);
}
}
但是,它会抛出
java.lang.IndexOutOfBoundsException
。
我错过了一些东西。任何帮助将不胜感激。
这是我用来将密码转换为点的 PasswordTransformationMethod 类的示例实现:
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;
}
public char charAt(int index) {
return '.';
}
public int length() {
return mSource.length();
}
public CharSequence subSequence(int start, int end) {
return mSource.subSequence(start, end); // Return default
}
}
};
您将其添加到 EditText 中,如下所示:
passwordEditText = (EditText) findViewById(R.id.passwordEditText);
passwordEditText.setTransformationMethod(new MyPasswordTransformationMethod());
这是我用来将密码转换为点的 PasswordTransformationMethod 类的示例实现:
公共类MyPasswordTransformationMethod扩展了PasswordTransformationMethod {+************73
@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;
}
public char charAt(+**********73) {
return '.';
}
public int length(+**********73) {
return mSource.length();
}
public CharSequence subSequence(int start, int end) {
return mSource.subSequence(start, end); // Return default
}
}