Android: Softkeyboard Control на HTC Desire
Вопрос
Я хотел, чтобы числовую клавиатуру имела кнопку, которая закрыла и выполнила класс расчета. Благодаря кончику от Commerware на то, куда начинать, я прекрасно работал на эмуляторе. Затем я пришел, чтобы загрузить его к своему HTC Hotire для тестирования, и это совсем не работает. Я уверен, что он должен быть из-за HTC Sense, имея свое собственное IME, но, безусловно, должен быть способ сделать эту работу над телефонами HTC? Кто-нибудь еще удалось обойти эту проблему?
Решение
Я могу реплицировать то, что я думаю, вы видите на HTC невероятно.
Не все программные клавиатуры будут поддерживать кнопку действий IME. Некоторые, такие как Graffiti Soft «клавиатура», может иметь никакие кнопки вообще, не говоря уже о кнопке действий IME. Даже Документ определения совместимости Ничего не говорит о необходимости такой кнопки действия для клавиатур, поставляемых с устройством.
Следовательно, вы не должны полагаться на кнопку IME Action. Если это там, пользователи могут использовать его. Тем не менее, всегда есть некоторые другие средства достижения любой цели.
Другие советы
Я обнаруживаю, была ли нажата кнопка «Готово / GO / REVER» с помощью ONEDITIONACTINGLISTENER, но проверка параметров IME и ключевых элементов для покрытия клавиатур HTC, а также любые клавиатуры, которые принимают параметры IME.
(Этот код работает для HTC невероятных клавиатур, а также любая клавиатура, которая имеет варианты 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;
}
}
});
Я использовал Edittext с Inputtype = «Номер» и решил проблему, изменяя решение ASCA:
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;
}
}
};
Фокус был удален для того, чтобы прекратить отображение номеров. ИММ требовался, потому что мягкая клавиатура все еще была присутствовать даже после очистки фокусировки.