Android onBackPressed方法工作不正常
在我的应用程序中有一个Android onBackPressed方法工作不正常,android,android-keypad,Android,Android Keypad,在我的应用程序中有一个EditText。我已为此EditText调用了活动中的键盘显示。键盘显示和工作良好 目前,我必须按两次后退按钮,一次用于隐藏键盘,另一次用于执行某些任务(如将数据保存到数据库)。我不想按两次后退按钮。 请引导我,或建议 这里有一些来自onBackPressed() 代码表单hideKeypad() 使用这种方法,它与您已经做的类似,但我对其进行了一些修改。注册主布局的侦听器,并将其对象作为参数传递,以便在单击编辑文本的外侧时,即。主布局键盘将消失 /** Close Ke
EditText
。我已为此EditText
调用了活动中的键盘显示。键盘显示和工作良好
目前,我必须按两次后退按钮,一次用于隐藏键盘,另一次用于执行某些任务(如将数据保存到数据库)。我不想按两次后退按钮。
请引导我,或建议
这里有一些来自onBackPressed()
代码表单hideKeypad()
使用这种方法,它与您已经做的类似,但我对其进行了一些修改。注册主布局的侦听器,并将其对象作为参数传递,以便在单击编辑文本的外侧时,即。主布局键盘将消失
/** 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);
}
问题是键盘消耗了第一个
反压
事件。你对此无能为力。
要解决这个问题,只需听键盘隐藏事件并完成活动
执行此操作的代码:
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.
}
});
按back键关闭键盘是UI的标准功能。你为什么要改变这个 习惯在Android设备上使用软键盘的用户将习惯于按一次键关闭键盘,然后再按一次键返回应用程序 如果在显示键盘时让应用程序中的“后退”按钮向后移动,会使导航与标准Android导航不同,许多用户可能会对此感到失望 除此之外,您的
onBackPressed
不会被调用,因为当显示键盘时,键盘的onBackPressed
会运行,正如我们所看到的,这就是隐藏键盘的地方,而not应用程序的onBackPressed
Me先生的答案是,如果你真的想这样做,我不建议你这样做。你有没有试过在用户输入他们正在输入的内容后隐藏键盘?没有,但我如何判断用户完成了输入@可能相关:你可能想检查你的
onBackPressed()
方法是否实际执行了(添加一个log.d或其他东西),而不是被其他东西(如软键盘)劫持听他们按回车键或回车键,无论你显示的是哪一个。我已经尝试了..这将EditText
传递给方法,但它仍然不起作用@Akhilesh ManiEditText
在我的应用程序中是全屏的..@AkhileshMani@PSK好的,我想我先生是对的,在这种情况下你可以使用EditorAction。
/** 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);
}
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.
}
});