В моем приложении для Android у меня другое место, EditText
где пользователь может вводить информацию. Но мне нужно заставить пользователя писать заглавными буквами. Вы знаете функцию для этого?
Ответы:
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);
maxLength
), Пытаются присоединить InputFilter.AllCaps()
к editText.getFilters
массиву. См. Stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Котлин замечательный! <3
Если вы хотите заставить пользователя писать заглавными буквами по умолчанию в вашем EditText, вам просто нужно добавить android:inputType="textCapCharacters"
. (Пользователь все еще может вручную перейти на строчные буквы.)
Установите input type
значение TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. keyboard
Должны соблюдать это.
Вы можете использовать два способа.
Первый способ:
Установите 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);
edittext.setSelection(edittext.length()); //fix reverse texting
}
}
});
Вы можете добавить android:textAllCaps="true"
свойство в свой XML-файл в EditText. Это приведет к тому, что клавиатура softinput будет отображаться в режиме заглавных букв. Введенное вами значение будет отображаться в верхнем регистре. Однако это не гарантирует, что пользователь сможет вводить только UpperCase
буквы. Если они хотят, они все равно могут вернуться к строчным буквам. Если вы хотите, чтобы выходные данные были Edittext
заглавными, вам нужно вручную преобразовать входную строку с помощью toUpperCase()
метода String
класса.
android:textAllCaps="true"
является только свойством TextView ( stackoverflow.com/a/28803492/5268730 ). android:inputType="textCapCharacters"
Вместо этого используйте .
Вы должны поместить android:inputType="textCapCharacters"
Edittext в файл xml.
Вместо того, чтобы беспокоиться о работе с клавиатурой, почему бы просто не принять любой ввод в нижнем или верхнем регистре и не преобразовать строку в верхний регистр?
Следующий код должен помочь:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
Это удобно, поскольку пользователю не нужно знать, что вам нужна строка в верхнем регистре. Надеюсь это поможет.
Еще лучше ... один лайнер в Котлине ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Выполнено!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
Использовать входной фильтр
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
В котлине , в файле .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"
/>
Это обновит клавиатуру при включении верхнего регистра.
Для меня это сработало, добавив 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"
/>
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());
}
});
Просто сделай это:
// ****** 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"
Чтобы получить весь капитал, используйте в своем XML следующее:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
Основываясь на принятом ответе, этот ответ делает то же самое, но в Котлине. Просто для облегчения копирования: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Чтобы получить клавиатуру с заглавной буквы при нажатии 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"
/>
Я использую 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, но все еще нет клавиатуры AllCaps на Android 5.1. Я установил фильтр, используя, EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
и, хотя программная клавиатура показывает символы нижнего регистра в Android 5.1, поле ввода теперь AllCaps.
РЕДАКТИРОВАТЬ: Поведенческие различия, которые я наблюдал и предполагал, что они связаны с ОС, были на самом деле потому, что у меня были разные версии Google Keyboard на тестовых устройствах. После того, как я обновил устройства до последней версии Google Keyboard (выпущенной в июле 2016 г. на момент написания этой статьи), поведение «Все заглавные буквы» стало одинаковым для всех операционных систем. Теперь все устройства показывают символы нижнего регистра на клавиатуре, но вводится заглавными буквами из-заSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin эквивалент ответа ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Просто добавьте код ниже в свой EditText вашего XML-файла.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
И если вы хотите разрешить и текст в верхнем регистре, и цифры, используйте код ниже.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
хоть.