5

我想要一个数字键盘,它有一个关闭并执行计算类的执行或完成按钮。感谢 commonware 关于从哪里开始的提示,我在模拟器上完美地工作了。然后我开始将它加载到我的 HTC 测试愿望中,它根本不起作用。我敢肯定这一定是因为 HTC 感觉拥有自己的 ime,但肯定有办法在 HTC 手机上进行这项工作?还有其他人设法解决这个问题吗?

4

3 回答 3

14

我可以复制我认为您在 HTC Incredible 上看到的内容。

并非所有软键盘都支持 IME 操作按钮。有些,如 Graffiti 软“键盘”,可能根本没有按钮,更不用说 IME 操作按钮了。甚至兼容性定义文档也没有说明设备随附的键盘需要这样的操作按钮。

因此,您不应依赖 IME 操作按钮。如果它在那里,用户可以使用它。然而,无论你的目标是什么,总是有一些其他的方法来完成。

于 2010-09-30T22:52:50.097 回答
11

我正在使用 onEditorActionListener 检测是否已按下 DONE / GO / RETURN 按钮,但检查 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;
        }
    }
});
于 2011-08-24T17:57:03.893 回答
2

我正在使用带有 inputType="number" 的 EditText 并通过修改 Asha 的解决方案解决了这个问题:

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 是必需的,因为即使在清除焦点后仍然存在软键盘。

于 2014-02-01T16:48:07.410 回答