Как использовать каждую букву в Android EditText? - программирование
Подтвердить что ты не робот

Как использовать каждую букву в Android EditText?

У меня есть массив editTexts, который я делаю так:

        inputs[i] = new EditText(this);
        inputs[i].setWidth(376);
        inputs[i].setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        tFields.addView(inputs[i]);

Я хочу, чтобы каждый символ был заглавным. Прямо сейчас первая буква первого слова имеет строчную букву, а все символы - верхний регистр. Я могу взять то, что пользователь вводит после того, как они сделаны, и преобразовать это в верхний регистр, но это не совсем то, что я собираюсь сделать. Есть ли способ заставить эти поля вести себя так, как я их хочу?

4b9b3361

Ответ 1

Вы также должны сказать это из текста "class":

inputs[i] = new EditText(this);
inputs[i].setWidth(376);
inputs[i].setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
tFields.addView(inputs[i]);

Тип ввода - это bitmask. Вы можете комбинировать флаги, помещая | (pipe) в середине, что означает логическую функцию OR, хотя при использовании в такой битовой маске это означает "этот флаг И этот другой флаг" .

(Этот ответ такой же, как у Робин, но без "волшебных чисел", одна из худших вещей, которые вы можете поместить в свой код. API Android имеет константы, использует их вместо копирования значений и рискует в конечном итоге сломать код.)

Ответ 2

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

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

Оригинальный ответ здесь.

Ответ 3

Просто используйте метод String.toUpperCase().

пример:

String str = "blablabla";
editText.setText(str.toUpperCase()); // it will give : BLABLABLA

EDIT:

добавьте этот атрибут к тегу EditText в layout xml:

 android:textAllCaps="true"

ИЛИ:

Если вы хотите, чтобы пользователь вводил верхний регистр, вы можете реализовать TextWatcher и использовать EditText addTextChangedListener, чтобы добавить его, в метод onTextChange введите пользовательский ввод и замените его тем же текст в верхнем регистре.

editText.addTextChangedListener(upperCaseTextWatcher);

final TextWatcher upperCaseTextWatcher = new TextWatcher() {

public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    editText.setText(editText.getText().toString().toUpperCase());
    editText.setSelection(editText.getText().toString().length());
}

public void afterTextChanged(Editable editable) {
}

};

Ответ 4

Вы можете попробовать следующее:

android:inputType="textCapCharacters"

Это сработало для меня. =)

Ответ 5

Это будет работать

    inputs[i] = new EditText(this);
    inputs[i].setWidth(376);
    inputs[i].setInputType(0x00001001);
    tFields.addView(inputs[i]);

0x00001001 соответствует константе textCapCharacters.

Ответ 6

попробуйте использовать эту единственную строку кода в вашем xml:

android:capitalize="sentences"

Ответ 7

По какой-то причине добавление xml не работает на моем устройстве.

Я обнаружил, что текстовый фильтр работает в верхнем регистре, например,

    EditText editText = (EditText) findViewById(R.id.editTextId);

    InputFilter toUpperCaseFilter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {

            StringBuilder stringBuilder = new StringBuilder();

            for (int i = start; i < end; i++) {
                Character character = source.charAt(i);
                character = Character.toUpperCase(character); // THIS IS UPPER CASING
                stringBuilder.append(character);

            }
            return stringBuilder.toString();
        }

    };

    editText.setFilters(new InputFilter[] { toUpperCaseFilter });

Ответ 8

Я знаю, что этот вопрос немного устарел, но здесь объясняется, как это делается по-разному:

Применение UpperCase в XML

Добавьте в XML файл EditText следующее:

android:textAllCaps="true"

Применение UpperCase как единственного фильтра к EditText в Java

Здесь мы устанавливаем фильтр UpperCase как единственный фильтр EditText. Обратите внимание, что этот метод удаляет все ранее добавленные фильтры.

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

Добавление UpperCase к существующим фильтрам EditText в Java

Чтобы сохранить уже примененные фильтры EditText, скажем, inputType, maxLength и т.д., вам нужно извлечь прикладные фильтры, добавить фильтр UpperCase к этим фильтрам и вернуть их в EditText. Вот пример, как:

InputFilter[] editFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = new InputFilter.AllCaps();  
editText.setFilters(newFilters);