В моем приложении 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"