我想在Android的TextWatcher中用“a”字符替换打字的字符,但也要在变量中保存真正的字符。要做到这一点,在afterTextChanged我写这个代码来替换字符:
if(s.toString().charAt(s.length()-1) != 'a'){
txtfreak.setText(s.toString().substring(0, s.length()-1) + "a");
txtfreak.setSelection(txtfreak.getText().length());
}
我希望在替换之前保存真正的类型字符,并在beforeTextChanged中执行此操作,我编写此代码:
freaktext=s.toString();
但是id不起作用,freaktext包含我在afterTextChanged中所做的更改!!我的问题是beforeTextChanged比afterTextChanged之前运行?在我的代码中它似乎不是!!
答案 0 :(得分:1)
还有另一种方法可以使用TextWatcher
来实现您想要的效果,这可能适用于您的情况。通过以下方法,您可以显示“a”代替每个字符,并访问EditText
字段中的原始文字。
我希望它适合您,而不是TextWatcher
。
警告 :如果下面的方法无法满足您的目的,那么您可以使用TextWatcher
开始,但即便如此在你修复你的bug后你将不得不走得更远。您必须手动处理以任何可能的方式编辑文本的用户,包括从Span的开头或中间或从剪贴板粘贴。
您需要组合android:inputType="textPassword"
(将所有文字更改为点“。”)并实施PasswordTransformationMethod
(更改默认点到'a')。
您将设置freaktext
变量,如下所示:
freaktext.setTransformationMethod(new MyPasswordTransformationMethod());
您必须访问此链接,才能获得完整示例的@Eric:In android how to show asterisk (*) in place of dots in EditText having inputtype as textPassword?
答案 1 :(得分:1)
if(s.toString().charAt(s.length()-1) != 'a'){
freaktext=txtfreak.getText().toString();
txtfreak.setText(s.toString().substring(0, s.length()-1) + "a");
txtfreak.setSelection(txtfreak.getText().length());
}