Відповіді:
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.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()
У 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"
/>
Це дозволить оновити клавіатуру, як увімкнено верхній регістр.
Використовуйте вхідний фільтр
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
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"
Для мене це працювало, додаючи 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"
/>
Щоб отримати весь капітал, використовуйте наступне у своєму 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
Щоб отримати велику клавіатуру при натисканні редагування тексту, використовуйте цей код у вашому 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.
EDIT: Відмінності в поведінці, які я спостерігав і вважав пов’язаними з ОС, були насправді тому, що у мене на тестових пристроях були різні версії клавіатури Google. Після того, як я оновив пристрої до останньої клавіатури Google (вийшла липня 2016 року з моменту написання цього повідомлення), поведінка "Усі капи" була послідовною у всіх ОС. Тепер на всіх пристроях відображаються малі символи на клавіатурі, але вхід - All Caps черезSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin еквівалент відповіді ЕрлВолтона:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Просто додайте нижче код у свій EditText вашого файлу xml.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
А якщо ви хочете дозволити як великий текст, так і цифри, тоді використовуйте код нижче.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
хоча.