首页 > 解决方案 > 如何将editText中的字母大写?

问题描述

我很简单Edittext,当我要在即时设置监听器中更改输入字母时new textWatcher,它的onTextChanged()方法如下:

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.d("qwer", "onTextChanged: " + s + " " + start + " " + before + " " + count);

            String originalText = s.toString();
            int originalTextLength = originalText.length();
            int currentSelection = textHeading.getSelectionStart();

            StringBuilder sb = new StringBuilder();
            boolean hasChanged = false;
            for (int i = 0; i < originalTextLength; i++) {
                char currentChar = originalText.charAt(i);
                if (isAllowed(currentChar) && i < 21) {
                    sb.append(currentChar);
                } else {
                    hasChanged = true;
                    textHeading.setError("Please insert current letters");
                }
            }
            if (hasChanged) {
                String newText = sb.toString();
                textHeading.setText(capitalize(newText));
                textHeading.setSelection(currentSelection);
            }
        }

当我将经过验证的数据设置回edittext时,无限循环开始了,因为它ontextCahnged()再次调用方法。所以我的目标是动态更改输入字母,我必须将其大写。我知道有更多最简单的方法可以做到这一点。但我需要这样做。

标签: androidandroid-edittexttextwatcher

解决方案


有很多方法可以做到这一点:

1- 使用常用的 Utils

图书馆:http ://commons.apache.org/proper/commons-lang/

StringUtils.capitalize(..)

2- 通过自定义方法

public static String upperCaseFirst(String value) {

        // Convert String to char array.
        char[] array = value.toCharArray();
        // Modify first element in array.
        array[0] = Character.toUpperCase(array[0]);
        // Return string.
        return new String(array);
    }

3- 来自 apache Common

图书馆:http ://commons.apache.org/proper/commons-lang/

WordUtils.capitalize(java.lang.String)

现在您可以将该字符串分配给您的输入框。


推荐阅读