Подтвердить что ты не робот

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

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

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

При вводе пользовательской опции на клавиатуре можно изменить регистр букв i.e, пользователь с этой опцией может легко напечатать буквы 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)

4b9b3361

Ответ 1

В макете xml добавьте android:capitalize="sentences"

Параметры android:capitalize следующие:

android:capitalize="none": это не будет автоматически заглавным.

android:capitalize="sentences": он будет использовать первое слово каждого предложения.

android:capitalize="words": который будет использовать первую букву каждого слова.

android:capitalize="characters": который будет использовать каждый символ.

Update:

Поскольку android:capitalize устарел, теперь нужно использовать:

android:inputType="textCapWords"

Ответ 2

программно изменить тип ввода.

Если вы находитесь в макете "Вид", чем используете этот код

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);

Ответ 3

Попробуйте это,

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;
        }
    }
}​

Ответ 4

android:capitalize устарел. Вместо этого используйте inputType.

Ответ 5

Сделать заглавными буквами каждое слово:

android:inputType="textCapWords"

Чтобы сделать заглавную букву каждого предложения:

android:inputType="textCapSentences"

Чтобы каждая буква была заглавной:

android:inputType="textCapCharacters"