EditText с цифровой клавиатурой по умолчанию, но с буквенными символами

У меня есть окно EditText, и я хочу, чтобы клавиатура по умолчанию появлялась, когда она выбрана как цифровая клавиатура, поскольку большую часть времени пользователи будут вводить числа. Тем не менее, я хочу, чтобы пользователи также вводили алфавитные символы, если им это нужно. Использование android:inputType="number" ограничивает ввод только числовыми цифрами. Какие у меня варианты?

Solutions Collecting From Web of "EditText с цифровой клавиатурой по умолчанию, но с буквенными символами"

Вот что вы ищете:

Определите свой EditText в xml следующим образом:

 <EditText android:id="@+id/etTest" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="@string/hint"> </EditText> 

И позвоните в свой onCreate() :

 etTest = (EditText) findViewById(R.id.etTest); etTest.setRawInputType(InputType.TYPE_CLASS_NUMBER); // Note the "Raw" 

Всякий раз, когда вы нажимаете на свой EditText , вы можете вводить цифры и буквы ! (Сначала отображается цифровая клавиатура)

Я бы предложил более надежное решение:

Представьте пользователю возможность выбора типа ввода:

НЕОБХОДИМЫЕ ИСПРАВЛЕНИЯ

лучшая обработка показа / скрытия кнопок выбора входа

вероятно, удалите предложения, когда тип ввода – буква

Введите описание изображения здесь

Вот деятельность:

 package mobi.sherif.numberstexttextview; import android.os.Bundle; import android.app.Activity; import android.text.InputType; import android.view.View; import android.view.View.OnFocusChangeListener; import android.widget.EditText; public class MainActivity extends Activity { EditText mEdit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEdit = (EditText) findViewById(R.id.input); mEdit.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean focused) { findViewById(R.id.llmenu).setVisibility(focused?View.VISIBLE:View.GONE); } }); } public void onNumbers(View v) { mEdit.setInputType(InputType.TYPE_CLASS_NUMBER); } public void onLetters(View v) { mEdit.setInputType(InputType.TYPE_CLASS_TEXT); } } 

Вот как выглядит xml: activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ScrollView android:id="@+id/scrollview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignWithParentIfMissing="true" android:layout_above="@+id/llmenu" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" > <requestFocus /> </EditText> </LinearLayout> </ScrollView> <LinearLayout android:id="@+id/llmenu" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#000000" android:padding="0dp" > <Button android:id="@+id/buttonnumbers" android:layout_width="0dp" android:onClick="onNumbers" android:layout_height="match_parent" android:layout_weight="1" android:text="Numbers" /> <Button android:id="@+id/buttonletters" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onLetters" android:text="Letters" /> </LinearLayout> </RelativeLayout> 

К сожалению, это невозможно, потому что для EditText может быть установлен только один тип ввода. Следующие кнопки будут просто отображать алфавитные символы на кнопках.

 <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="text|number" /> 

Однако, что я могу вам предложить, установите свой тип ввода в числовой и просто добавьте небольшую кнопку buttonKeyboard на вашей форме рядом с numpad. И установите его onClick

 editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); 

Так что пользователи могут переключаться на буквенные символы.

В основном, inputType EditText используется для установки типа ввода в вашем EditText.

Возможные значения для android:inputtype :

  • текст
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • TextFilter
  • textPhonetic
  • номер
  • numberSigned
  • numberDecimal
  • Телефон
  • Дата и время
  • Дата
  • время

То вы можете использовать любое значение, как показано в примере:

 <EditText android:id="@+id/EditText01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:inputType="number" android:text="1212223"/> 

Планшет Asus имеет эту функцию, они настроили клавиатуру по умолчанию. И клавиатура содержит только цифры и алфавиты. Я думаю, что ваше решение для решения тоже настроено для настройки клавиатуры по умолчанию

Определите свой EditText в xml следующим образом:

 <EditText android:id="@+id/txtOppCodigoCliente" android:inputType="textVisiblePassword" android:layout_width="match_parent" android:layout_height="match_parent" android:maxLength="11" android:hint="@string/strCodigoCliente"/> 

Output : android: inputType = "textVisiblePassword"

Ряд цифр и остальные буквы.

В OnCreate in Activity сделайте следующее:

  t = (EditText) findViewById(R.id.test); t.setKeyListener(new KeyListener() { @Override public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) { return false; } @Override public boolean onKeyOther(View view, Editable text, KeyEvent event) { return false; } @Override public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) { if (keyCode == 67) { // Handle backspace button =) if (text.length() > 0) { t.setText(text.subSequence(0, text.length() - 1)); t.setSelection(text.length()-1); } } return false; } @Override public int getInputType() { return InputType.TYPE_CLASS_NUMBER; } @Override public void clearMetaKeyState(View view, Editable content, int states) { } }); 

В этом случае вы вводите number и Android отображает цифровую клавиатуру, но вы можете вводить все, что хотите. Также вы можете переопределить другие методы по своему усмотрению.

Вот как я это достиг …

Android: inputType = "textPhonetic | numberDecimal" android: digits = "/ 0123456789.abcdefghijklmnopqrstuvwxyz"

Разрешены только символы, указанные цифрами.

Обратите внимание, что показанная клавиатура – это номер дозвона, а не обычная клавиатура. Для меня это достигло того, что мне нужно было полностью в XML.

Вы можете следовать за ответом Пареша Майяни.

И в совете вы можете использовать android:inputType="textPhonetic" для inputType Text и Number на основе выбора пользователя.

Надеюсь, ты получишь мою мысль.

Почему бы просто не включить кнопку переключения:

  • Устанавливает тип ввода, чтобы разрешить только числовые значения
  • Устанавливает тип ввода, позволяющий использовать клавиатуру QWERTY
  • Или задайте другие типы ввода (если необходимо)

Таким образом, вы можете установить цифровую клавиатуру по умолчанию, а затем пользователь может ее изменить, нажав кнопку.

Вы не должны использовать какой-либо фильтр inputType в этом случае, просто добавьте строку ниже в свой объект EditText

 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 " 

Теперь только этим символам будет разрешено войти в EditText. Полный код вашего edittext будет выглядеть следующим образом:

 <EditText android:id="@+id/etTest" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 " android:hint="@string/hint"> 

Это невозможно, учитывая текущие типы ввода Android по умолчанию для разных телефонов.

Существует много возможных хаков, которые работают на некоторых клавиатурах, но не на других , например, на общий метод установки исходного типа ввода, который обычно включается в ответы:

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

Лучший совет, который я смог найти, – использовать тип ввода textPostalAddress в XML:

  • android:inputType="textPostalAddress"

К сожалению, это не делает того, что мы хотим сделать, но, возможно, в будущем . Единственное преимущество этого заключается в том, что метаинформация в вашем окне редактирования будет отражать то, что вы намерены.

Программировать это можно с небольшим изменением обычного потока. Сначала вы должны установить editText как:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

Тогда вы должны слушать keyevent. При нажатии фунта снова установите InputType на InputType.TYPE_CLASS_TEXT. Это должно работать так, как оно работает для меня.

 editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // TODO Auto-generated method stub Log.d("KeyBoard", "Keyboard Test Key Hit"); switch (keyCode) { KeyEvent.KEYCODE_POUND: if(editText.setInputType(InputType.TYPE_CLASS_TEXT); { editText.setInputType(InputType.TYPE_CLASS_TEXT); return true; } } } } 

Вы можете попробовать установить —

 editText.setRawInputType(Configuration.KEYBOARD_QWERTY); 

Для более подробного описания

В вашем коде для textView удалите «текст» в android: inputType.

Должен быть,

 <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="number" /> 

Вы можете сделать это программно:

 // Numbers mEditText.setInputType(InputType.TYPE_CLASS_NUMBER); // Text mEditText.setInputType(InputType.TYPE_CLASS_TEXT); 

SetInputType (int type) Установите тип содержимого с константой, как определено для inputType.

Как говорит Саурав, лучший способ заключается в том, чтобы переключиться между QWERTY Keyboard и Numeric Keyborad с помощью простого слушателя:

 input.setInputType(InputType.TYPE_CLASS_TEXT); input.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { switch (keyCode) { case 24: // Volumen UP input.setInputType(InputType.TYPE_CLASS_NUMBER); break; case 25: // Volumen DOWN input.setInputType(InputType.TYPE_CLASS_TEXT); break; } return true; } }); 

Я пробую весь метод, но не совершенен. Поэтому у меня есть другая идея. Работа идеально подходит для всей клавиатуры.

  @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reset_password); editText.setRawInputType(InputType.TYPE_CLASS_NUMBER); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks whether a hardware keyboard is available if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show(); if (editText.isFocused()) { editText.setInputType(InputType.TYPE_CLASS_TEXT); } } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show(); if (editText.getInputType() == InputType.TYPE_CLASS_TEXT) { editText.setInputType(InputType.TYPE_CLASS_NUMBER); } } } 

В вашем XML-макете для EditText добавьте этот параметр:

 android:inputType="number|text" 

Это позволит пользователю вводить как текст, так и номер и содержит логику в xml, а не код в вашей деятельности или фрагменте.