У меня есть поле EditText, и мне нужна клавиатура по умолчанию, которая появляется, когда она выбрана как цифровая клавиатура, поскольку большую часть времени пользователи будут вводить числа. Однако я хочу разрешить пользователям вводить буквенные символы, если им нужно. Использование android:inputType="number"
ограничивает ввод только числовыми цифрами. Какие у меня есть варианты?
android
android-keypad
Фрэнк Боззо
источник
источник
Ответы:
Определите свой 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"/>
вывод: android: inputType = "textVisiblePassword"
Ряд цифр и остальные буквы.
источник
Я бы предложил более надежное решение:
Подарите пользователю возможность выбрать тип ввода:
НЕОБХОДИМЫЕ ИСПРАВЛЕНИЯ
- улучшена обработка отображения / скрытия кнопок выбора входа
- возможно удалить предложения, если тип ввода - буква
Вот действие:
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
в своем 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
сейчас, вы можете вводить цифры И буквы ! (Сначала отображается цифровая клавиатура)источник
К сожалению, это невозможно, потому что для EditText можно задать только один inputType. Следующее будет просто отображать буквенные символы на кнопках.
<EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="text|number" />
Однако я могу предложить вам установить числовой тип ввода и просто добавить небольшую кнопку switchKeyboard в форму рядом с цифровой панелью. И установите его onClick
editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
так что пользователи могут также переключаться на буквенные символы.
источник
TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_SIGNED
. Но никогда нельзя смешивать такие классы, какnumber
иtext
number|text
(см. выше), которая подразумевает, что вы можете вводить буквы с помощью длительного нажатия, на самом деле не работает. для меня выглядит довольно глючным или, по крайней мере, неполным.TYPE_MASK_CLASS
: Маски битов, определяющих общий класс передаваемого текста. поддерживаемые классы: TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME. Авторы IME: Если класс не один вы понимаете, предположим TYPE_CLASS_TEXT с изменением NO или флагов «.По сути, тип ввода EditText используется для установки типа ввода в вашем EditText.
Возможные значения
android:inputtype
:тогда вы можете использовать любое значение, как показано в примере:
<EditText android:id="@+id/EditText01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:inputType="number" android:text="1212223"/>
источник
Планшет Asus имеет эту функцию, они настроили клавиатуру по умолчанию. А клавиатура содержит только цифры и буквы. Я думаю, что ваше требование - также настроить клавиатуру по умолчанию
источник
Вы можете следить за ответом Пареша Майани.
И в advice вы можете использовать
android:inputType="textPhonetic"
для inputType Text и Number в зависимости от выбора пользователя.Надеюсь, вы поняли мою точку зрения.
источник
В OnCreate в 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) { } });
В этом случае вы вводите is,
number
и android покажет цифровую клавиатуру, но вы можете ввести все, что хотите. Также вы можете переопределить другие методы по своему желанию.источник
Вот как я этого добился ...
android: inputType = "textPhonetic | numberDecimal" android: digits = "/ 0123456789.abcdefghijklmnopqrstuvwxyz"
Разрешены только символы, указанные цифрами.
Обратите внимание, что показанная клавиатура - это клавиатура номеронабирателя, а не обычная клавиатура. Для меня он достиг того, что мне нужно, полностью в пределах XML.
источник
В этом случае вам не следует использовать какой-либо фильтр 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">
источник
Программно это возможно с небольшими изменениями в обычном потоке. Сначала вам нужно установить 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; } } } }
источник
Почему бы просто не иметь кнопку-переключатель, которая:
Таким образом, вы можете установить цифровую клавиатуру по умолчанию, а затем пользователь может изменить ее, нажав кнопку.
источник
Это невозможно учетом текущих типов ввода Android по умолчанию на различных телефонах.
Есть много возможных хаков, которые работают на некоторых клавиатурах, но не работают на других , например, общий метод установки необработанного типа ввода, который обычно включается в ответы:
editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)
Лучший совет, который я мог найти, - использовать
textPostalAddress
тип ввода в вашем XML:android:inputType="textPostalAddress"
К сожалению , это не то , что мы хотим сделать еще , но , возможно , это будет в будущем . Единственное преимущество этого заключается в том, что метаинформация в вашем поле редактирования будет отражать то, что вы намереваетесь.
источник
Вы можете попробовать установить ---
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);
источник
Как говорит Саурав, лучший способ - переключаться между QWERTY-клавиатурой и цифровой клавиатурой с помощью простого слушателя:
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, а не код в вашем действии или фрагменте.
источник