EditText с цифровой клавиатурой по умолчанию, но допускает буквенные символы - PullRequest
79 голосов
/ 23 августа 2010

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

Ответы [ 19 ]

1 голос
/ 25 ноября 2015

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

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

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

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

  • android:inputType="textPostalAddress"

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

1 голос
/ 24 февраля 2015

Программно это возможно с небольшим изменением обычного потока.Сначала вы должны установить 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;
              }
         }
     }
}  
1 голос
/ 27 января 2013

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

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

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

0 голосов
/ 23 июля 2016

Я пробую все методы, но не идеально. Так что у меня есть другая идея. Идеально подходит для любой клавиатуры.

 @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);
        }
    }
}
0 голосов
/ 10 мая 2016

Как говорит Саурав, лучший способ - переключаться между 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;
    }
});
0 голосов
/ 04 февраля 2015

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

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

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

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

0 голосов
/ 04 февраля 2015

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

android:inputType="number|text"

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

0 голосов
/ 27 января 2013

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

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

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

0 голосов
/ 29 января 2013

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

Так и должно быть,

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...