Заглавная буква для 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);

Можно комбинировать с текстом и его вариациями, чтобы запросить заглавные буквы первого символа каждого предложения.

- Гугл документы


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); или android: inputType = "textCapSentences" будет работать только при включенной настройке Auto Capitalize клавиатуры вашего устройства.
Лакшманан

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

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); или android: inputType = "textCapSentences" будет работать только при включенной настройке Auto Capitalize клавиатуры вашего устройства. Какая альтернатива для этого, программно?
Свифт

@JamesWierzba Я буду ссылаться здесь ответ Shivang как ответ для поддержки многострочного. Добавить андроид: 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

Примените следующую строку в вашем EditText в XML.

android:inputType="textCapSentences|textMultiLine"

Это также позволит многострочную поддержку.


2
Это должен быть принятый ответ, так как это единственное решение, которое не
свернет

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

или android:inputType="textCapSentences"будет работать только при включенной настройке Auto Capitalize клавиатуры вашего устройства.


Спасибо, я застрял, потому что я только что отключил настройку Auto Capitalize на клавиатуре устройства
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. андроид: inputType = "textCapSentences"
  2. андроид: 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

андроид: 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"

Обратите внимание, что это будет работать только в том случае, если на вашем устройстве включена функция Auto Capitalize.

Чтобы сделать это программно, используйте следующий метод:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

Я основал и мое решение: у вас есть 2 способа решить его в 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.