2017-07-06 94 views
0

我想用字符替换EditText视图的显示值,同时将原始输入保留在另一个StringBuilder对象中。TextWatcher StringBuilder append方法将CharSequence附加到两个StringBuilder对象

下面的代码:

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

首先inputed字符显示在吐司作为原始字符inputed,但第二个增加一个*它。所以如果我输入a它显示a,如果我输入aa,它显示aa*,对于aaa它是aa*a**等等。

如何将这些对象同时附加到这两个对象上?代码应附加到stringBuilderHiddenPassword,但很明显,这不是这种方法的工作原理。

回答

0

发现使用replace方法对原始字符串的解决方案:

replace = pass.toString().replace("*", ""); 
Toast.makeText(Pass.this, replace, Toast.LENGTH_SHORT).show(); 
+0

不,这不是你应该做的,你应该使用一个自定义的'TransformationMethod'相反,文档说什么:*“的TextView使用TransformationMethods进行操作,例如用点替换密码字符,或保持换行符不会在单行文本字段中出现换行符。“* – pskink