将字母设置为大写动态android

时间:2015-10-17 20:00:43

标签: android android-edittext uppercase

我喜欢每次用户输入一个字母编辑文本,将字母转换为大写字母。这是我的代码:

 @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和我的转换中的所有方法永远不会结束。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

在更改之前,您需要确保检查文本是否为大写。这样它就不会再次改变它,如果它没有并且让你进入一个连续循环。您无需在beforeTextChangedafterTextChanged内添加任何内容。

示例:

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