私はすでに次のオプションを使用して単語の大文字をそれぞれ大文字にしました
_ <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
_
、自動的に上記の形式に変換されます。
私はTextWatcher
とstring.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);
}
}
_
この関数はTextWatcher
、afterTextChanged(Editable s)
から呼び出しています
レイアウトxml
にAndroid:capitalize="sentences"
を追加します
Android:capitalize
のオプションは次のとおりです。
Android:capitalize="none"
:自動的に大文字になりません。
Android:capitalize="sentences"
:各文の最初の単語を大文字にします。
Android:capitalize="words"
:すべての単語の最初の文字を大文字にします。
Android:capitalize="characters"
:すべての文字を大文字にします。
更新:
Android:capitalize
は非推奨となったため、次を使用する必要があります。
Android:inputType="textCapWords"
プログラムで入力タイプを変更します。
レイアウトを表示している場合は、このコードを使用してください
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);
これを試して、
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;
}
}
}
Android:capitalize
は非推奨です。代わりにinputType
を使用してください。
最初の文字を大文字にするすべての単語の:
Android:inputType="textCapWords"
最初の文字を大文字にするすべての文の:
Android:inputType="textCapSentences"
すべての文字大文字にする:
Android:inputType="textCapCharacters"