我喜欢每次用户输入一个字母编辑文本,将字母转换为大写字母。这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test = (EditText) findViewById(R.id.test);
test.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
beforeStr = s.toString();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
char current = s.charAt(before);
newCurrent += String.valueOf(current).toUpperCase() + beforeStr;
}
@Override
public void afterTextChanged(Editable s) {
test.setText(newCurrent);
}
});
}
setText方法一次又一次地调用TextWatcher和我的转换中的所有方法永远不会结束。
有人能帮助我吗?
答案 0 :(得分:2)
在更改之前,您需要确保检查文本是否为大写。这样它就不会再次改变它,如果它没有并且让你进入一个连续循环。您无需在beforeTextChanged
和afterTextChanged
内添加任何内容。
示例:强>
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String upper = s.toString().toUpperCase();
if (!s.equals(upper)) {
test.setText(upper);
}
}
或者您可以在EditText
xml。
android:textAllCaps="true"
答案 1 :(得分:1)
可能更容易使用Android提供的过滤器
myEditText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});