隐藏键盘问题

时间:2012-12-02 11:40:43

标签: android

单击按钮时,我使用以下代码隐藏键盘:

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        final View activityRootView = findViewById(R.id.myProfileDetails);
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
                if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
                }
             }
        });
        //other code that does something

    }

}

该按钮还可以执行其他操作,但没有一个与键盘相关,按下按钮时,活动不会更改。

我的活动中还有两个EditText字段。当我使用应用程序并点击任一字段时,它们会获得焦点并出现键盘。当我按下按钮时,键盘消失,其他代码完全按照应有的顺序执行。在这种情况下,一切都很完美。

第二次点击EditText字段时出现问题。现在,EditText获得焦点,但键盘出现并几乎立即消失,而我没有做任何事情。我猜我的代码使键盘在我第一次点击按钮后永久消失。为什么会发生这种情况?我该如何纠正?

1 个答案:

答案 0 :(得分:0)

您正在初始化ClickListener中的OnClick。这将在heightDiff>100后立即隐藏键盘。不要这样做。

喜欢这个

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
                    imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                   imm.hideSoftInputFromWindow(
                                editText.getWindowToken(), 0);

        //other code that does something

    }

}