Android EditText / TextView如何使每个单词以大写开头,所有剩余的单词字符为小写

时间:2014-01-16 06:52:12

标签: android android-edittext uppercase lowercase

我已经使用以下选项来制作单词大写的每个起始字母

 <EditText
    android:inputType="text|textCapWords"/>

键入用户时,键盘上有选项可以更改字母大小写,即使用此选项的用户可以轻松输入lowercase个字母。

此外,我希望EditText上的文字采用此格式

Each Starting Letter Of A Word Must Be In Uppercase And All Other Letter Of The Word Be In Lowercase

含义,当用户输入

each StArting LeTTer of a word musT be in uppercase and all other leTTer of the word be in lowercase

,它会自动转换为以上格式。

我尝试使用TextWatcherstring.split(\\s+)来获取所有字词,然后让每个字都遵循上述格式。但我总是得到错误。 所以,如果有任何解决方案,那就太棒了。我想让它以InputFilter.AllCaps的方式工作。

这是我目前的代码

private void changeToUpperCase(String inputString) {
    if (inputString != null && inputString.trim().length() > 0) {
        // businessName.addTextChangedListener(null);
        String[] splitString = inputString.split("\\s+");
        int length = splitString.length;
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            String convertedString = splitString[i];
            stringBuffer.append(Character.toUpperCase(convertedString
                    .charAt(0)));
            stringBuffer.append(convertedString.substring(1).toLowerCase());
            stringBuffer.append(" ");
        }
        Log.i("changed String", stringBuffer.toString());
        // businessName.setText(stringBuffer.toString());
        stringBuffer.delete(0, stringBuffer.length());
        stringBuffer = null;
        // businessName.addTextChangedListener(this);
    }
}

我从TextWatcherafterTextChanged(Editable s)

打来的这个功能

5 个答案:

答案 0 :(得分:21)

在布局xml中,添加android:capitalize="sentences"

android:capitalize的选项如下:

android:capitalize="none":不会自动将任何内容大写。

android:capitalize="sentences":将每个句子的第一个单词大写。

android:capitalize="words":将每个单词的第一个字母大写。

android:capitalize="characters":将每个角色都大写。

更新

由于android:capitalize已弃用,现在需要使用:

android:inputType="textCapWords"

答案 1 :(得分:2)

以编程方式更改输入类型。

如果您处于View布局而不是使用此代码

EditText text = new EditText(context);
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every word.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first word of each sentence.
addView(text);

如果你在活动

EditText text = new EditText(this);
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every word.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first word of each sentence.
setContentView(text);

答案 2 :(得分:1)

试试这个,

txtView.setText(WordUtils.capitalize("text view")

WordUtils.java

public class WordUtils {

    public static String capitalize(String str) {
        return capitalize(str, (char[]) null);
    }

    public static String capitalize(String str, char... delimiters) {
        int delimLen = delimiters == null ? -1 : delimiters.length;
        if (!TextUtils.isEmpty(str) && delimLen != 0) {
            char[] buffer = str.toCharArray();
            boolean capitalizeNext = true;

            for (int i = 0; i < buffer.length; ++i) {
                char ch = buffer[i];
                if (isDelimiter(ch, delimiters)) {
                    capitalizeNext = true;
                } else if (capitalizeNext) {
                    buffer[i] = Character.toTitleCase(ch);
                    capitalizeNext = false;
                }
            }

            return new String(buffer);
        } else {
            return str;
        }
    }

    private static boolean isDelimiter(char ch, char[] delimiters) {
        if (delimiters == null) {
            return Character.isWhitespace(ch);
        } else {
            char[] arr$ = delimiters;
            int len$ = delimiters.length;

            for (int i$ = 0; i$ < len$; ++i$) {
                char delimiter = arr$[i$];
                if (ch == delimiter) {
                    return true;
                }
            }

            return false;
        }
    }
}​

答案 3 :(得分:1)

android:capitalize已弃用。请改用inputType

答案 4 :(得分:0)

要使每个单词的首字母大写:

android:inputType="textCapWords"

要使每个句子的首字母大写:

android:inputType="textCapSentences"

每个字母大写

android:inputType="textCapCharacters"