Android EditText / TextView, как заставить каждое слово начинаться с верхнего регистра, а все остальные символы слов – строчными буквами

Я уже использовал следующие параметры, чтобы сделать каждую стартовую букву слова «Верхний регистр»

<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 из TextWatcher , afterTextChanged(Editable s)

Solutions Collecting From Web of "Android EditText / TextView, как заставить каждое слово начинаться с верхнего регистра, а все остальные символы слов – строчными буквами"

В макете 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 этого используйте inputType .