В Android EditText, как заставить писать заглавные буквы?

В моем приложении Android у меня есть разные EditText, где пользователь может вводить информацию. Но мне нужно заставить пользователя писать заглавные буквы. Знаете ли вы функцию для этого?

Ответ 1

Android фактически имеет встроенный InputFilter только для этого !

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

Будьте осторожны, setFilters сбросит все остальные атрибуты, которые были установлены через XML (т.е. maxLines, inputType, imeOptinos...). Чтобы предотвратить это, добавьте свои Фильтры к уже существующим.

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);

Ответ 2

Если вы хотите, чтобы принуждал пользователя писать в заглавные буквы по умолчанию в вашем EditText, вам просто нужно добавить android:inputType="textCapCharacters". (Пользователь по-прежнему может изменить вручную на нижний регистр.)

Ответ 3

Установите input type на TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS. keyboard должен соблюдать это.

Ответ 4

Вы можете использовать два способа.

Первый способ:

Установите android:inputType="textCapSentences" в свой EditText.

Второй способ:

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

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
    }
});  

Ответ 5

Вы можете добавить свойство android:textAllCaps="true" в свой XML файл в EditText. Это приведет к тому, что клавиатура softinput появится во всех режимах "колпачки". Введенное значение появится в верхнем регистре. Однако это не гарантирует, что пользователь может ввести только буквы UpperCase. Если они хотят, они все равно могут вернуться к строчным буквам. Если вы хотите убедиться, что вывод Edittext находится во всех шапках, вам необходимо вручную преобразовать входную строку с помощью метода toUpperCase() класса String.

Ответ 6

Вместо того, чтобы беспокоиться о работе с клавиатурой, почему бы просто не принять какие-либо вводные, строчные или прописные и преобразовать строку в верхний регистр?

Следующий код должен помочь:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

Это удобно, поскольку пользователю не требуется знать, что вам нужна строка в верхнем регистре. Надеюсь, это поможет.

Ответ 7

Вы должны поместить android:inputType="textCapCharacters" с помощью Edittext в xml файл.

Ответ 8

Использовать фильтр ввода

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

Ответ 9

Просто сделай это:

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"

Ответ 10

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  

Ответ 11

Еще лучше... один лайнер в Kotlin...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

Готово!

Ответ 12

Чтобы получить весь капитал, используйте следующее в своем XML:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

Ответ 13

В kotlin, в файле .kt внесите изменения:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

Используйте синтетическое свойство для прямого доступа к виджету с идентификатором. А в XML для вашего текста редактирования добавьте еще пару флажков:

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

Это обновит клавиатуру в верхнем регистре.

Ответ 14

Чтобы получить заглавную клавиатуру, когда нажмите edittext, используйте этот код в своем xml,

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />

Ответ 15

Я использую Visual Studio 2015/Xamarin для сборки своего приложения как для Android 5.1, так и для Android 6.0 (один и тот же apk установлен на обоих).

Когда я указал android:inputType="textCapCharacters" в моем axml, клавиатура AllCaps появилась, как и ожидалось, на Android 6.0, но не на Android 5.1. Я добавил android:textAllCaps="true" в мой файл axml, но на Android 5.1 все еще нет клавиатуры AllCaps. Я установил фильтр, используя EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); и хотя на Android 5.1 программная клавиатура отображает строчные буквы, в качестве поля ввода теперь используется AllCaps.

РЕДАКТИРОВАТЬ: поведенческие различия, которые я наблюдал и предположительно связанные с ОС, были на самом деле, потому что у меня были разные версии Google Keyboard на тестовых устройствах. После того, как я обновил устройства до последней Google Keyboard (выпущенной в июле 2016 года на момент написания этой статьи), поведение "всех заглавных букв" было одинаковым для всех операционных систем. Теперь все устройства отображают строчные буквы на клавиатуре, но ввод SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); с помощью всех заглавных SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); из-за SetFilters(new IInputFilter[] { new InputFilterAllCaps() });

Ответ 16

На основании принятого ответа этот ответ делает то же самое, но в Котлине. Просто для облегчения копирования: ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}

Ответ 17

Xamarin эквивалент ErlVolton ответ:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

Ответ 18

Попробуйте использовать любой из приведенных ниже кодов может решить вашу проблему.

программно:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

android:inputType="textCapCharacters" with Edittext

Ответ 19

Простая реализация котлина

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS для меня filters всегда пустые изначально

Ответ 20

Java 1-liner предложенного решения может быть:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

Обратите внимание, что для этого нужны com.google.common.collect.Lists.

Ответ 21

Для меня это сработало, добавив android: textAllCaps = "true" и android: inputType = "textCapCharacters"

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />

Ответ 22

Просто добавьте ниже код в свой EditText вашего xml файла.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

И если вы хотите разрешить как заглавный текст, так и цифры, используйте ниже код.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"