【问题标题】:Programmatically setting up password dots in EditText以编程方式在 EditText 中设置密码点
【发布时间】:2013-11-07 08:58:08
【问题描述】:

我一直在尝试以编程方式将我的编辑文本设置为密码字段,如下所示:

方法一:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

方法二:

password.setTransformationMethod(PasswordTransformationMethod.getInstance());

方法三:

password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

方法四:

    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());

我按如下方式创建了我的编辑文本:

        // Create the password edittext
    EditText etPwrd = new EditText(this);

    // Customise the password edittext
    etPwrd.setLayoutParams(etPwrdParams);
    etPwrd.setBackgroundResource(R.drawable.etlogin);
    etPwrd.setTextSize(18f);
    etPwrd.setLongClickable(false);
    etPwrd.setPadding (5,0,0,0);
    etPwrd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    etPwrd.setTransformationMethod(new MyPasswordTransformationMethod());
    etPwrd.setTypeface(officialRegularFont);
    //etPwrd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
    //etPwrd.setTransformationMethod(PasswordTransformationMethod.getInstance());
    etPwrd.setSingleLine();
    etPwrd.setHint(R.string.password_text);
    etPwrd.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

    });

我使用上述所有方法均未成功,因为当用户输入字符时,edittext 仍会显示字符。

我知道如何在 XML 中将编辑文本设置为密码字段,但我需要以编程方式进行设置。

【问题讨论】:

  • 方法 4 应该可以工作。可能你会错过在 XML 文件中为 EditText 添加 inputtype。
  • 添加这一行'etPwrd.setTransformationMethod(new MyPasswordTransformationMethod());'在“etPwrd.setCustomSelectionActionModeCallback”之后,它应该可以工作
  • @krishna:谢谢.. 成功了!!!非常感谢您的帮助!!!
  • 欢迎,永远不要忘记在edittext的所有声明末尾添加setTransformationMethod()
  • 是的……在最后……干杯

标签: android


【解决方案1】:

您不需要创建另一个密码转换方法,您可以这样做。

password.setTransformationMethod(PasswordTransformationMethod.getInstance());

【讨论】:

  • 注意:这会在键入时显示字符,并在几毫秒后使其变为点。
  • +1 这里是best answer
【解决方案2】:

在 onCreate() 创建 EditText 时添加这两行

    et2.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
    et2.setTransformationMethod(new MyPasswordTransformationMethod());

然后像这样在同一活动中创建MyPasswordTransformationMethod

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
        }
    }
};

【讨论】:

  • 嗨,克里希纳,程序化位不起作用。至于 XML,因为我正在以编程方式开发所有内容,所以我无法从 XML 文件中调用编辑文本
  • 然后在创建 EditText 时添加这一行 password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
  • 如果您在以编程方式创建edittext的代码后仍有问题
  • 感谢您的建议。我已经包含了我的编辑文本的程序化创建,其中涉及您对 settransformationmethod() 的建议;
  • android:password="true" android:inputType="textPassword"
猜你喜欢
  • 2011-11-10
  • 2016-11-10
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
相关资源
最近更新 更多