Как использовать каждую букву в 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]);
Я хочу, чтобы каждый символ был заглавным. Прямо сейчас первая буква первого слова имеет строчную букву, а все символы - верхний регистр. Я могу взять то, что пользователь вводит после того, как они сделаны, и преобразовать это в верхний регистр, но это не совсем то, что я собираюсь сделать. Есть ли способ заставить эти поля вести себя так, как я их хочу?
Ответы
Ответ 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);