0

ボタンがクリックされたときにキーボードを非表示にするために、次のコードを使用しています。

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、私の活動には 2 つのフィールドがあります。アプリケーションを使用しているときにいずれかのフィールドをタップすると、それらがフォーカスされてキーボードが表示されます。ボタンを押すと、キーボードが消え、他のコードが正確に実行されます。この場合、すべてが完璧です。

EditTextいずれかのフィールドを 2 回タップすると問題が発生します。これで、EditTextフォーカスが得られますが、何もしなくてもキーボードがほぼ瞬時に表示および非表示になります。ボタンを初めてクリックした後、コードがキーボードを完全に非表示にしていると思います。なぜこれが起こっているのですか?どうすれば修正できますか?

4

1 に答える 1

0

で a を初期化し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

    }

}
于 2012-12-02T11:56:41.680 に答える