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

4 ответа

В макете 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);

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

android:inputType="textCapWords"

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

android:inputType="textCapSentences"

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

android:inputType="textCapCharacters"

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

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 вместо.

Другие вопросы по тегам