我想要一个数字键盘,它有一个关闭并执行计算类的go或done按钮。感谢来自通用软件的提示,从哪里开始,我在模拟器上得到了漂亮的工作。然后我来加载我的HTC测试的愿望,它根本不起作用。我敢肯定一定是因为HTC意识到它有自己的ime但是肯定有办法在HTC手机上做这个工作吗?其他人设法解决了这个问题吗?
答案 0 :(得分:14)
我可以复制我认为您在HTC Incredible上看到的内容。
并非所有软键盘都支持IME操作按钮。有些像Graffiti软键盘一样,根本没有按钮,更不用说IME动作按钮了。即使Compatibility Definition Document也没有说明为设备提供的键盘需要这样的操作按钮。
因此,您不应该依赖IME操作按钮。如果它在那里,用户可以使用它。但是,总是有其他方法来实现你的目标。
答案 1 :(得分: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;
}
}
});
答案 2 :(得分: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。