Java TextWatcher StringBuilder append方法将CharSequence附加到两个StringBuilder对象
我试图用字符替换EditText视图的显示值,同时将原始输入保留在另一个StringBuilder对象中 代码如下:Java TextWatcher StringBuilder append方法将CharSequence附加到两个StringBuilder对象,java,android,append,stringbuilder,Java,Android,Append,Stringbuilder,我试图用字符替换EditText视图的显示值,同时将原始输入保留在另一个StringBuilder对象中 代码如下: final StringBuilder stringBuilderHiddenPassword = new StringBuilder(); final StringBuilder mPass = new StringBuilder(); pass = new StringBuilder(); etPassword.addTextChangedListen
final StringBuilder stringBuilderHiddenPassword = new StringBuilder();
final StringBuilder mPass = new StringBuilder();
pass = new StringBuilder();
etPassword.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
stringBuilderHiddenPassword.append("*");
etPassword.removeTextChangedListener(this);
etPassword.setText(stringBuilderHiddenPassword);
etPassword.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
pass.append(s);
Toast.makeText(Pass.this, pass, Toast.LENGTH_SHORT).show();
}
});
第一个输入的字符作为输入的原始字符显示在Toast中,但第二个字符将添加一个*
。因此,如果我输入a
它会显示a
,如果我输入aa
,它会显示aa*
,对于aaa
它是aa*a**
,依此类推
如何将这些对象与同时附加的对象分开?代码应该只附加到
stringBuilderHiddenPassword
,但很明显,这不是此方法的工作原理。通过对原始字符串使用替换
方法找到了解决方案:
replace = pass.toString().replace("*", "");
Toast.makeText(Pass.this, replace, Toast.LENGTH_SHORT).show();
不,这不是你应该做的,你应该使用一个自定义的
转换方法,文档说:“TextView使用转换方法来做一些事情,比如用点替换密码字符,或者防止换行符在单行文本字段中引起换行。”