Жесткая клавиатура не в состоянии сосредоточиться editText - PullRequest
8 голосов
/ 15 мая 2011

У меня есть общий EditText.Это очень странно, потому что я не могу сосредоточиться, когда использую жесткую клавиатуру.Условие контекста:

  1. включить аппаратную клавиатуру дроида на
  2. запустить занятие
  3. щелкнуть текст редактирования для ввода
  4. Не удалось ввести.Когда вы нажимаете любую клавишу, editText теряет фокус.

Чтобы получить фокус: нажмите Dpad, и вы увидите, что фокус начинается с 1-го виджета на экране.И, наконец, сосредоточиться на целевом EditText.Затем вы можете ввести.Без этого вы не сможете вводить данные с помощью жесткой клавиатуры.

У мягкой клавиатуры такой проблемы с фокусировкой нет.

Я использую Android 2.2.Это системная ошибка?

Ответы [ 2 ]

9 голосов
/ 31 декабря 2011

Как уже упоминалось выше, это явно ошибка с жесткой клавиатурой. Если в макете есть EditText и TabHost, то при первом нажатии клавиши EditText теряет фокус и вместо этого нажатие клавиши отправляется действию. Вот обходной путь к этой проблеме. Реализуйте это в своей деятельности.

@Override

public boolean onKeyDown(int keyCode, KeyEvent event){

    final EditText myInputField = (EditText) findViewById(R.id.MyInputEditText);
    // this will happen on first key pressed on hard-keyboard only. Once myInputField 
    // gets the focus again, it will automatically receive further key presses.
    if (!myInputField.hasFocus()){ 
        myInputField.requestFocus();
        myInputField.onKeyDown(keyCode, event);
    }
    return super.onKeyDown(keyCode, event);
}

если у вас есть несколько полей EditText, вам нужно будет отслеживать текущий EditText в фокусе переменной класса и использовать его в методе onKeyDown.

0 голосов
/ 12 декабря 2011

У меня такая же проблема.Я вроде согласен с Джеем.Обычно TabHost и / или TabActivity используют LocalActivityManager, который отслеживает встроенные действия или соответствующий компонент ContentStrategy, который отображается в элементе FrameLayout.Говоря простыми словами, это типичная проблема встраиваемых макетов «Виды деятельности».Редактировать текст находится в самом верхнем Activity / View, который занимает пространство сенсорного экрана, в то время как есть основной Activity, который фактически содержит этот Activity / View, который, вероятно, захватывает фокус InputMethodService и удерживает его подальше от Edit Text,только для сценария хард-клавиатуры.Софт-клавиатура просто отлично работает.

Одно изменение, которое я сделал в своем тексте редактирования, это изменение InputType как чисто десятичного.Поэтому, когда редактирование текста получает фокус, экранная клавиатура отображает цифровую клавиатуру, а не буквенную клавиатуру qwerty.Я запускал его на эмуляторе Motorla Droid Pro, который я обновил в Eclipse Plugins с сайта Motodev.По-видимому, когда я пытаюсь ввести текст с жесткой клавиатуры после того, как я выделил фокус для «Редактировать текст» (а на программной клавиатуре отображается цифровая клавиатура), после нажатия «ALT + 2» программная клавиатура перезагружается.как буквенная клавиатура, в то время как текст редактирования полностью теряет фокус.

Мне кажется, что серьезная ошибка в релизе Froyo, недостаточная поддержка устройств с жесткой клавиатурой для редактирования текстовых представлений в макетах (LinearLayout), встроенных в другие макеты (FrameLayout of TabHost).

...