检测键盘是否显示在带导航抽屉的android中

时间:2014-12-09 16:33:15

标签: android navigation-drawer android-softkeyboard

我已经尝试this solution,但onGlobalLayout()永远不会被调用。 是的,我已经在清单中设置了android:windowSoftInputMode="adjustResize"

也许是因为我使用DrawerLayout作为我的活动根布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<!-- The main content view -->

<LinearLayout
    android:id="@+id/main_fragment_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" />

<!-- The navigation drawer -->

<LinearLayout
    android:id="@+id/user_fragment_layout"
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:orientation="vertical" >
</LinearLayout>

</android.support.v4.widget.DrawerLayout>

我在activity_drawer_layout中测试了main_fragment_layoutfindViewById()但未成功; onGlobalLayout()永远不会被调用。请帮我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

我不确定您要通过识别键盘是否可见来实现目标,但如果您只想在导航抽屉打开时隐藏键盘,我建议您使用以下代码

private void hideKeyboard() {   
    // Check if no view has focus:
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

你也看了How to check visibility of software keyboard in Android?