Як змусити EditText розпочинати текст з великої літери?


Відповіді:


160

Будьте обережні, якщо додасте обидва android:capitalize="sentences"і android:inputType="text", оскільки останні, здається, мають пріоритет над першими, і введення не буде написано великими літерами.

Існує специфіка inputTypeдля автоматичного написання великої літери першої літери:

android:inputType="textCapSentences"

Див. Http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType


1
Приємна порада! У мене були обидва, і це спрацювало, як очікувалося, на Nexus One та Galaxy Nexus. Але на пристрої HTC Sense слова не були написані з великої літери. android: inputType був фокус.
BoD

10
Слово попередження: оскільки в моєму випадку поле мало бути ім’ям людини, я встановив android: inputType = "textPersonName". Це не спрацювало, як очікувалося: мені довелося використовувати android: inputType = "textCapWords", щоб кожне слово імені було написано великими літерами.
Jeff G

2
android: капіталізація = "речення" не повинна використовувати цей тег, тому що це застаріло
pioneerBhawna

Що робити, якщо android: inputType = "textMultiLine"?
КРП

12
Потім використовуватиandroid:inputType="textMultiLine|textCapSentences"
4mnes7y

23

Варіанти для android: використовувати великі літери є

android:inputType="none", which won't automatically capitalize anything.

android:inputType="sentences", Which will capitalize the first word of each sentence.

android:inputType="words", Which Will Capitalize The First Letter Of Every Word.

android:inputType="characters", WHICH WILL CAPITALIZE EVERY CHARACTER.

Очевидно, його замінено на inputTypeзамістьcapitalize


3
Цей метод застарілий.
h8pathak

@ h8pathak inputType слід використовувати на користь цього методу.
Джоел Дін,

17

Використовуйте

android:inputType="textPersonName|textCapWords"

оскільки використання лише "textPersonName"недостатньо, тому перші літери імені будуть написані великими літерами.

Подібно до поштових адрес:

android:inputType="textPostalAddress|textCapSentences"

Не працює добре з іменами, такими як "da Silva" або "von Anhalt".
шинка

8

Додайте це у свій XML

 android:inputType="textCapWords"

android:inputType="textCapSentences"буде працювати на речення. Однак мені потрібно було писати великі літери кожного слова в полі з повним іменем.


6

Спробуйте таким чином,

testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

або android:inputType="textCapSentences"працюватиме лише в тому випадку, якщо на клавіатурі пристрою ввімкнено функцію автоматичного використання великих літер .


прийнята відповідь чудова, але я шукав відповідь на кодування, це працює. tx
Борис Гафуров


3

Ви вжили слово "Примусити". Тож спробуйте це. Просто передайте ваш edittext як аргумент.

public static void setCapitalizeTextWatcher(final EditText editText) {
    final TextWatcher textWatcher = new TextWatcher() {

        int mStart = 0;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mStart = start + count;
        }

        @Override
        public void afterTextChanged(Editable s) {
             String input = s.toString();
            String capitalizedText;
            if (input.length() < 1)
                capitalizedText = input;
            else
                capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);
            if (!capitalizedText.equals(editText.getText().toString())) {
                editText.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        editText.setSelection(mStart);
                        editText.removeTextChangedListener(this);
                    }
                });
                editText.setText(capitalizedText);
            }
        }
    };

    editText.addTextChangedListener(textWatcher);
}



1

Вставте це у текст редагування (xml):

  android:capitalize="sentences"

1
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

Незважаючи на те, що цей фрагмент коду може вирішити питання, включення пояснення дійсно допомагає поліпшити якість вашої публікації. Пам’ятайте, що ви будете відповідати на запитання для читачів у майбутньому, і ці люди можуть не знати причин вашої пропозиції коду. Будь ласка, також намагайтеся не переповнювати свій код пояснювальними коментарями, це зменшує читабельність як коду, так і пояснень!
Ashish Ahuja

1

якщо ви зіткнулися з настирливим випадком налаштування android: inputType = textCapSentences, а потім закінчите з однорядковим EditText, ось рішення:

    android:inputType="textCapSentences|textMultiLine"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.