在Android TextWatcher中替换键入的字符

时间:2013-03-27 14:10:53

标签: java android textwatcher

我想在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之前运行?在我的代码中它似乎不是!!

2 个答案:

答案 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());
}