2013-03-27 100 views
4

我使用TextWatcher更改按下的键值。我的目标是在打字时替换一些字符。例如当我键入键时,如果达到“S”字符,用“a”字符替换它。我的问题是:我应该在beforeTextChanged吗?怎么样?任何人都可以给我一个例子吗?替换TextWatcher中的字符android

+0

尝试使用'afterTextChanged'代替beforeTextChanged'的'在EditText上 – 2013-03-27 07:36:22

+0

替换字符我试图做到这一点,但我不能得到我想要的。你可以给我一个例子吗? – Fcoder 2013-03-27 07:37:36

+0

PLZ解释更多如果你正在使用afterTextChanged和你想获得更多帮助,你会得到什么 – 2013-03-27 07:40:10

回答

1

使用beforeTextChanged将不会有用,因为它不会中断EditText实际键的打印。我会使用类似的东西:

public void afterTextChanged(Editable s) { 
     if(s.length() > 0 && s.toString().charAt(s.length()-1) == 'S') 
     { 
      final String newText = s.toString().substring(0, s.length()-1) + "a"; 
      editText.setText(newText); 
     } 
    } 

我加了一些的toString()的,不是100%肯定我是如何工作的编辑,但认为应该覆盖它。

-1
@Override 
public void afterTextChanged(Editable arg0) { 
    Editable ab = new SpannableStringBuilder(arg0.toString().replace("S", "a")); 
    arg0 = ab ; 
} 
+0

重新分配本地变量对原始可编辑值没有任何影响! – user2878850 2017-09-19 19:08:23

7

我知道这个帖子是一对夫妇岁,但两个版本并没有为我工作,具有建设两个答案之间的混合体。

@Override 
public void afterTextChanged(Editable editable) {  
    if (editable.toString().contains(",")) { 
     Editable ab = new SpannableStringBuilder(editable.toString().replace(",", "")); 
     editable.replace(0, editable.length(), ab); 
    } 
}