我有一个 editText
,你在里面写一些东西然后当你点击下一步时..你写的文本被写入另一个 editText ..
它完美地工作..
但我想用 textWatcher 来替换一些字母..
示例:如何使 S 为 $
或 O 为 @
更新:
final EditText First = (EditText)findViewById(R.id.etFirst);
String strFirst = First.getText().toString();
final TextView done = (TextView)findViewById(R.id.tvName);
String strDone = done.getText().toString();
Button Trans = (Button) findViewById(R.id.bTrans);
Trans.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//First EditText
if (First.getText().toString().equals("John")) {
done.setText("JOHN");
} else {
if (First.getText().toString().equals("Ahmed")) {
done.setText("AHMED");
} else {
done.setText(First.getText());
}
}
};
});
First.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
done.setText(First.getText().toString().replaceAll("S", "$"));
}
});
我的代码会将您在 EditText 中写的内容输入到下面的大 TextView .. 当我按下按钮
Trans
时,它会设置您写的文本,但我想将一些字母示例 S 替换为 $ .. 当我输入 S 时,没有任何 react 。 . 只是 S 它不会是 $ ..我究竟做错了什么 ?
最佳答案
将 Textwatcher 分配给您的 editText 然后执行类似的操作
editText.setText(editText.getText().toString().replaceAll("S", "$"));
这是应用了代码的 textWatcher
final EditText First = (EditText)findViewById(R.id.etFirst);
String strFirst = First.getText().toString();
final TextView done = (TextView)findViewById(R.id.tvName);
String strDone = done.getText().toString();
Button Trans = (Button) findViewById(R.id.bTrans);
Trans.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//First EditText
if (First.getText().toString().equals("John")) {
done.setText("JOHN");
} else {
if (First.getText().toString().equals("Ahmed")) {
done.setText("AHMED");
} else {
done.setText(First.getText());
}
}
};
});
First.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
String text = First.getText().toString();
text = text.replace('s', 'd'); // Any of the diffrent replace methods should work.
text = text.replace('S', '$'); // This uses the char replace method. Note, the ' quotations
text = text.replace('O', '@');
text = text.replace('o', '@');
done.setText(text);
}
});
错误可能在于您再次获取旧字符串并对其应用
text.replace
。而不是修改后的字符串。我原以为它会得到新的字符串,但 setText 似乎不会立即触发。因此,如果将字符串放入变量中,则应用所有更改。然后把它放回你的文本框它会正常工作。 (
I have tested and working code here Pasted above
)关于Android 使用 TextWatcher 替换单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12081924/