Android: управление софт-клавиатурой на HTC desire - PullRequest
5 голосов
/ 01 октября 2010

Я хотел, чтобы цифровая клавиатура имела кнопку «Перейти» или «Готово», которая закрывала и выполняла класс вычисления. Благодаря совету от Commonware о том, с чего начать, я прекрасно работал на эмуляторе. Тогда я пришел, чтобы загрузить его на мое желание HTC для тестирования, и он не работает вообще. Я уверен, что это происходит из-за того, что HTC имеет свой собственный момент, но наверняка должен быть способ заставить это работать на телефонах HTC? Кому-нибудь еще удалось обойти эту проблему?

Ответы [ 3 ]

14 голосов
/ 01 октября 2010

Я могу воспроизвести то, что вы видите в HTC Incredible.

Не все программные клавиатуры поддерживают кнопку действия IME.Некоторые, например, мягкая «клавиатура» Graffiti, могут вообще не иметь кнопок, не говоря уже о кнопке IME.Даже в документе с определениями совместимости ничего не говорится о необходимости такой кнопки действия для клавиатур, поставляемых с устройством.

Следовательно, вам не следует полагаться на кнопку действия IME.Если он есть, пользователи могут его использовать.Тем не менее, всегда имейте некоторые другие средства для достижения любой вашей цели.

11 голосов
/ 24 августа 2011

Я определяю, была ли нажата кнопка DONE / GO / RETURN, с помощью onEditorActionListener, но проверяю опции IME и KeyEvents для покрытия клавиатур HTC, а также любых клавиатур, которые принимают опции IME.

(Этокод работает и для клавиатур HTC Incredible, а также для любой клавиатуры с опциями IME)

EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){
    public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){
        if(actionId == EditorInfo.IME_ACTION_DONE 
            || actionId == EditorInfo.IME_NULL
            || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

            //Do something in here
            return true;
        } else {
            return false;
        }
    }
});
2 голосов
/ 01 февраля 2014

Я использовал EditText с inputType = "number" и решил проблему, изменив решение Аши:

private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){
        public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE 
                || actionId == EditorInfo.IME_NULL
                || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

                tv.clearFocus();

                //Stupid keyboard needs to be closed as well
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(tv.getWindowToken(), 0);

                return true;
            } else {
                return false;
            }
        }
    };

Фокус был удален, чтобы прекратить показ цифровой клавиатуры. Им потребовался imm, потому что программная клавиатура все еще присутствовала даже после очистки фокуса.

...