6

在我的应用程序中有一个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);
}
4

3 回答 3

1

使用此方法与您已经完成的方法相似,但我对其进行了少许修改。注册主布局的侦听器并将其对象作为参数传递,以便当您单击编辑文本的一侧时,即 主布局键盘将消失。

/** 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);    
    }
于 2013-03-20T09:58:17.033 回答
1

按返回关闭键盘是 UI 的标准功能。你为什么要改变这个?

习惯于在 Android 设备上使用软键盘的用户将习惯于按一次后退关闭键盘,然后再按一次返回应用程序。

如果您在显示键盘时让应用程序中的后退按钮向后移动,这会使导航与标准的 Android 导航不同,许多用户可能会对此感到沮丧。

除此之外,你onBackPressed没有被调用,因为当键盘显示时,onBackPressed键盘运行- 正如我们所见 - 隐藏键盘 - 而不是你的onBackPressed应用程序。

如果您确实想这样做,Mr.Me 的回答是这样做的方法,但我不建议这样做。

于 2013-03-20T10:06:58.487 回答
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. 
}
});
于 2013-03-20T10:04:32.437 回答