Мягкая цифровая клавиатура EditText иногда не позволяет вводить цифры

Следующий код создает EditText (целевая версия 23). Я работал над этим около 8 часов и получил несколько предложений, но я не думаю, что кто-то когда-либо видел это раньше, поэтому я застрял.

  1. Нажмите на поле.
  2. Открывается программная клавиатура A/N.
  3. Нажмите 123? Кнопка внизу слева. Цифровая программная клавиатура открывается.
  4. Нажмите любую цифру. Ничего не произошло.
  5. Длительное нажатие 5, "5/8" добавляется в текстовое поле.
  6. Нажмите любой специальный символ, например, @. Это может добавить к полю.
  7. Очистить поле. Введите "для", нажмите 123?, теперь он будет принимать цифры.
  8. Очистить поле. Наберите "for?", Нажмите 123?, Цифры не будут приниматься.

Я добавил TextWatcher. Если цифры не были опубликованы, TextWatcher их тоже не видел.

EditText bottomT = new EditText(model);
bottomT.setTextSize(14);
bottomT.setHint("ZIP");  
bottomT.setHintTextColor(Color.BLACK);
bottomT.setBackgroundColor(Color.WHITE);
bottomT.setTextColor(Color.BLACK);
// bottomT.setInputType(InputType.TYPE_CLASS_NUMBER)  Didn't make any difference.
// bottomT.setRawInputType(InputType.TYPE_CLASS_NUMBER)  Didn't make any difference.
// bottomT.setText("", TextView.BufferType.EDITABLE);  DIdn't make a difference
bottomT.setText(""); 

3 ответа

EditText плохо себя ведет, потому что в моей пользовательской ViewGroup я имел

 protected void onLayout(boolean changed, int l, int t, int r, int b)
{
....
     child.layout(child.getLeft(), child.getTop(),
                    child.getLeft() + child.getMeasuredWidth(),
                    child.getTop() + child.getMeasuredHeight());

     child.setRight(somevalue);   // CAUSES EDITTEXT PROBLEMS
     child.setBottom(somevalue);  // CAUSES EDITTEXT PROBLEMS

Теперь ясно, что я не могу установить setRight() и setBottom(), но также ясно, что EditText не должен становиться странным.

Игнорировать клавишу возврата.

Случайно игнорировать цифровые клавиши, но принять десятичную точку.

Игнорировать ключ newLine(Enter)

Какие ключи игнорируются или нет, зависит от устройства. Samsung Tab 4 или эмулятор Nexus 5 API 23 X86 - хорошие места, чтобы увидеть это.

Попробуйте эту строку кода.

bottomT.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL);

Вы должны добавить эту строку в свой код Java.

bottomT.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
Другие вопросы по тегам