Перша літера з великої літери для EditText


383

Я працюю над невеликим персональним додатком зі списку тодо, і поки що все працює досить добре. Є одна маленька химерність, яку я хотів би зрозуміти. Щоразу, коли я йду додати новий елемент, у мене є діалогове вікно з поданням EditText, яке відображається всередині. Коли я вибираю перегляд EditText, клавіатура вводить текст, як слід. У більшості застосунків за замовчуванням здається, що клавіша shift утримується для першої літери ... хоча це, на мій погляд, не робить. Має бути простий спосіб виправити, але я кілька разів шукав посилання і не можу його знайти. Я думаю, що повинен бути атрибут xml для посилання, завантаженого адаптером, але я не можу дізнатися, що це таке.

Відповіді:


805

Статично (тобто у вашому файлі XML-файл): встановіть android:inputType="textCapSentences"на ваш EditText.

Програмний: ви повинні включити InputType.TYPE_CLASS_TEXTв InputTypeз EditText, наприклад ,

EditText editor = new EditText(this); 
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Можна поєднувати з текстом та його варіантами, вимагаючи написання великої літери першого символу кожного речення.

- Документи Google


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); або android: inputType = "textCapSentences" працюватиме лише в тому випадку, якщо на клавіатурі вашого пристрою ввімкнено автоматичне налаштування великої літери.
Лакшманан

8
Чому ввімкнення цієї причини призвело android:lines="7"до того, що у мене більше не відображаються 7 рядків (тепер вона за замовчуванням повертається до 1 рядка)
James Wierzba

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); або android: inputType = "textCapSentences" працюватиме лише в тому випадку, якщо на клавіатурі вашого пристрою ввімкнено автоматичне налаштування великої літери. Яка альтернатива цьому, програмно?
Швидкий

@JamesWierzba Я буду називати тут відповідь Шиванга як відповідь на підтримку багаторядкових. Додати android: inputType = "textCapSentences | textMultiLine"
Ленін

76

Просто використовуйте android:inputType="textCapWords"у своєму елементі EditText.

Наприклад:

<EditText
    android:id="@+id/txtName"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_weight="0.7"
    android:inputType="textCapWords"
    android:textColorHint="#aaa"
    android:hint="Name Surname"
    android:textSize="12sp" />

Для отримання довідки зверніться до наступного посилання: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


Добре позначити код у елементі коду, а не зробити його жирним.
Раві Бхатт

13
Ця відповідь насправді не допомагає питанню ОП. Це використовуватиме великі літери для кожного слова , а не перший символ вхідного тексту (який передбачається реченням). Хоча це, ймовірно, може допомогти іншим, правильною відповіддю є прийнята відповідь.
Андрій Т.

37

Застосувати наступний рядок у своєму редакторі в XML.

android:inputType="textCapSentences|textMultiLine"

Це також дозволить підтримувати багато рядків.


2
Це має бути прийнятою відповіддю, оскільки це єдине рішення, яке не зруйнує EditText в однорядковий
egorikem

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

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


Дякую, я застряг, тому що я просто відключив клавіатуру пристрою Автоматична настройка капіталів
Pulkit

20

Я зіткнувся з тією ж проблемою, просто поділившись тим, що дізнався. Може допомогти вам та іншим ...

Спробуйте це на своєму layout.add рядку нижче у вашому EditText.

android:inputType="textCapWords|textCapSentences"

добре працює на мене .. сподіваюся, він працює і на вас ...


5

Я можу запевнити, що обидві відповіді зроблять заголовок першої літери і не будуть редагувати текстовий рядок.

Якщо ви хочете зробити це в XMl нижче, це код

android:inputType="textCapWords|textCapSentences"

Якщо ви хочете зробити це в діяльності / фрагменті тощо, це код

momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)

PS: Якщо у вас є інше майно, ви також можете легко додати його за допомогою труби "|" символ, просто переконайтеся, що між властивостями атрибута немає місця в xml


5

Для капіталізації в EditText можна вибрати два вхідні типи нижче:

  1. android: inputType = "textCapSentences"
  2. android: inputType = "textCapWords"

textCapSentences
Це дасть першу букву першого слова в якості великої літери у кожному реченні.

textCapWords Це дозволить створити першу букву кожного слова як «Капітал».

Якщо ви хочете, щоб обидва атрибути просто використовуйте | підпишіть обома атрибутами

android:inputType="textCapSentences|textCapWords"

3

Спробуйте цей Кодекс, він буде використовувати великі літери всіх слів.

- встановити addTextChangedListener для перегляду EditText

edt_text.addTextChangedListener (спостерігач);

- Додати TextWatcher

TextWatcher watcher = 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 if (input.length() > 1 && input.contains(" ")) {
            String fstr = input.substring(0, input.lastIndexOf(" ") + 1);
            if (fstr.length() == input.length()) {
                capitalizedText = fstr;
            } else {
                String sstr = input.substring(input.lastIndexOf(" ") + 1);
                sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1);
                capitalizedText = fstr + sstr;
            }
        } else
            capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);

        if (!capitalizedText.equals(edt_text.getText().toString())) {
            edt_text.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) {
                    edt_text.setSelection(mStart);
                    edt_text.removeTextChangedListener(this);
                }
            });
            edt_text.setText(capitalizedText);
        }
    }
};

3

Щоб використовувати великі літери, ви можете виконати наступне редагування тексту:

Скласти першу букву з великої літери кожного слова :

android:inputType="textCapWords"

Скласти першу букву з великої літери кожного речення :

android:inputType="textCapSentences"

Щоб зробити кожну літеру великою літерою :

android:inputType="textCapCharacters"

Але це внесе зміни лише на клавіатуру, і користувач може змінити режим, щоб писати букви у малому регістрі.

Тому цей підхід не надто цінується, якщо ви дійсно хочете, щоб дані були у форматі з великої літери, додайте спочатку наступний клас:

public class CapitalizeFirstLetter {
    public static String capitaliseName(String name) {
        String collect[] = name.split(" ");
        String returnName = "";
        for (int i = 0; i < collect.length; i++) {
            collect[i] = collect[i].trim().toLowerCase();
            if (collect[i].isEmpty() == false) {
                returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) + " ";
            }
        }
        return returnName.trim();
    }
    public static String capitaliseOnlyFirstLetter(String data)
    {
        return data.substring(0,1).toUpperCase()+data.substring(1);
    }
}

І потім,

Тепер, щоб використовувати великі літери на кожному слові:

CapitalizeFirstLetter.capitaliseName(name);

Використання великої літери лише першого слова:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

Встановіть тип введення в XML, а також у такому файлі JAVA,

У XML

android: inputType = "textMultiLine | textCapSentences"

Це також дозволить багаторядково і у файлі JAVA,

edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

переконайтеся , що на клавіатурі Auto-Капіталізація настройка включена .


2

У вашому макеті XML-файл:

  • набір android:inputType="textCapSentences"

  • На вашому EditTextмаєте бути першим алфавітом першого слова кожного речення як великої літери

  • Або android:inputType="textCapWords"у вашому EditText, щоб перший алфавіт кожного слова був основним


1

використовувати цей код лише з великої літери для EditText

MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:tag="true">
    </EditText>

</RelativeLayout>

MainActivity.java

EditText et = findViewById(R.id.et);
        et.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
            {
                if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
                {
                    et.setTag("false");
                    et.setText(et.getText().toString().toUpperCase());
                    et.setSelection(et.getText().toString().length());
                }
                if(et.getText().toString().length() == 0)
                {
                    et.setTag("true");
                }
            }

            public void afterTextChanged(Editable editable) {

            }
        });

0

Раніше це було раніше android:capitalize="words", а тепер застаріло. Рекомендована альтернатива - використанняandroid:inputType="textCapWords"

Зверніть увагу, що це буде працювати лише в тому випадку, якщо на клавіатурі вашого пристрою ввімкнено автоматичне налаштування великої літери.

Для цього потрібно використовувати наступний метод:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

я заснував і моє рішення: у вас є два способи вирішити це в Java:

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

і xml:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />


0

якщо ви пишете стилі в styles.xml, тоді

видалити android: властивість inputType та додати нижче рядків

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