-2

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

4

2 回答 2

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());
}
于 2013-03-27T17:57:12.560 回答
1

有一种替代方法可以使用 aTextWatcher来实现您想要的,这可能适用于您的情况。下面的方法将允许您显示“a”来代替每个字符并访问EditText字段中的原始文本。

我希望它对你有用,而不是TextWatcher.

警告:如果下面的方法不能满足您的目的,那么TextWatcher您已经开始使用它当然是可能的,但是即使您修复了您的错误,您也必须走得更远。您将不得不手动处理以任何可能方式编辑文本的用户,包括从 Span 的开头或中间或从剪贴板粘贴。


您需要将android:inputType="textPassword"(将所有文本更改为点 "." ) 和实现PasswordTransformationMethod(将默认点更改为 'a' ) 的组合。

您将freaktext像这样设置变量:

freaktext.setTransformationMethod(new MyPasswordTransformationMethod());

您将不得不访问此链接以向@Eric 致敬以获取完整示例:在 android 中,如何在具有 inputtype 为 textPassword 的 EditText 中显示星号 (*) 代替点?

于 2013-03-27T14:51:56.533 回答