如何使用TransformationMethod接口?

问题描述 投票:0回答:2

我想创建一个接受密码的

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

我错过了一些东西。任何帮助将不胜感激。

android passwords android-edittext
2个回答
13
投票

这是我用来将密码转换为点的 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());

0
投票

这是我用来将密码转换为点的 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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.