在我的应用中有一个EditText
。我已在此活动中为此EditText
调用了键盘显示。键盘显示&工作正常。
现在,我必须按两次按钮,一个用于隐藏键盘和按键。另一个用于执行某项任务(如保存到数据库的数据)。我不想再按两次按钮。
请指导我,或建议
这里有一些来自onBackPressed()
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
hideKeypad();
//saving EditText data to db.
}
代码表单hideKeypad()
private void hideKeypad() {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edittext1.getWindowToken(), 0);
}
答案 0 :(得分:1)
使用此方法它与您已经完成的相似,但我对其进行了少量修改。注册主布局的监听器并将其对象作为参数传递,以便当您单击编辑文本的一侧时,e。主布局键盘将消失。
/** Close Keypad on touch.
* @param view on which click happens. */
public void closeKeyPad(View view)
{
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
答案 1 :(得分:0)
问题是键盘会消耗第一个BackPressed
事件。你不能做任何事情。
解决这个问题只需听一下键盘隐藏事件并完成你的活动。
执行此操作的代码:
edit.setOnEditorActionListener(
new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
actionId == EditorInfo.IME_ACTION_DONE ||
event.getAction() == KeyEvent.ACTION_DOWN &&
event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
if (!event.isShiftPressed()) {
// the user is done typing. finish the activity
finish();
return true; // consume.
}
}
return false; // pass on to other listeners.
}
});
答案 2 :(得分:0)
按下以关闭键盘是UI的标准功能。你为什么要改变这个?
习惯在Android设备上使用软键盘的用户将被用来按回一次以关闭键盘,然后再次回到应用程序中。
如果在显示键盘时使后退按钮在应用程序中向后移动,则会使导航与标准Android导航不同,许多用户可能会对此感到沮丧。
除此之外,您的onBackPressed
未被调用,因为当显示键盘时,键盘<{strong>}的onBackPressed
正在运行 - 正如我们所见过的那样 - 是隐藏键盘的 - 并且不为您的应用程序onBackPressed
。
如果你想这样做,我会回答你的方法,但我不推荐它。