web-dev-qa-db-ja.com

Android EditText / TextView各Wordを大文字で開始し、残りのすべての文字を小文字にする方法

私はすでに次のオプションを使用して単語の大文字をそれぞれ大文字にしました

_ <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)から呼び出しています

16
laaptu

レイアウトxmlAndroid:capitalize="sentences"を追加します

Android:capitalizeのオプションは次のとおりです。

Android:capitalize="none":自動的に大文字になりません。

Android:capitalize="sentences":各文の最初の単語を大文字にします。

Android:capitalize="words":すべての単語の最初の文字を大文字にします。

Android:capitalize="characters":すべての文字を大文字にします。

更新:

Android:capitalizeは非推奨となったため、次を使用する必要があります。

Android:inputType="textCapWords"
22
Shylendra Madda

プログラムで入力タイプを変更します。

レイアウトを表示している場合は、このコードを使用してください

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
Sam

これを試して、

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;
        }
    }
}​
2
Jaydipsinh Zala

Android:capitalizeは非推奨です。代わりにinputTypeを使用してください。

1
Principiante

最初の文字を大文字にするすべての単語の

Android:inputType="textCapWords"

最初の文字を大文字にするすべての文の

Android:inputType="textCapSentences"

すべての文字大文字にする:

Android:inputType="textCapCharacters"
0
Suraj Vaishnav