Android导航抽屉(DrawerLayout)被内容视图隐藏

时间:2013-12-11 03:52:49

标签: android navigation-drawer

我有一个Navigation Drawer问题 在我的导航抽屉应用程序中,有时抽屉显示在其他内容视图的后面。因此,只显示抽屉的一部分(其他部分被内容区域隐藏)。

我尝试了一切,但它不起作用。

    drawer.bringToFront();
    drawer.buildLayer();
    drawer.clearFocus();
    drawer.requestLayout();
    drawer.forceLayout(); 

但在这种情况下,如果我触摸选项按钮或更改焦点,屏幕会刷新并显示抽屉。 所以我想知道当我触摸选项按钮时调用了哪种方法。然后我想我可以在抽屉打开时调用该方法 你先谢谢了。

4 个答案:

答案 0 :(得分:0)

我发布示例代码尝试检查您的代码。

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

    <RelativeLayout
        android:id="@+id/relative_home"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/tile_image_data" >


        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="48dip" >
        </android.support.v4.view.ViewPager>
    </RelativeLayout>

    <ListView
        android:id="@+id/drawer"
        android:layout_width="240dp"
        android:layout_height="fill_parent"
        android:layout_gravity="right"
        android:cacheColorHint="#00000000"
        android:divider="#19000000"
        android:background="@drawable/tile_image_data"
        android:choiceMode="singleChoice" />

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

答案 1 :(得分:0)

我遇到了同样的问题。我通过将android:id中的FrameLayout@android:id/content更改为@+id/content来解决此问题。显然,使用系统资源ID并不总是一个好主意。

答案 2 :(得分:0)

我遇到了同样的问题。当主视图调用onWindowsFocusChange()时,抽屉在主视图后面打开。这发生在Unity3D视图中。 我已经解决了调用函数的问题  onDrawerSlide(View drawerView, float slideOffset) ,这是DrawerListener中的一个方法,drawerView.bringToFront()。

答案 3 :(得分:0)

我遇到了同样的问题,但它似乎只发生在KITKAT之前的版本上。感谢@jack,在我更新了以下代码后,没关系:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open,
            R.string.drawer_close) {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);

            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                drawerView.bringToFront();
                getWindow().getDecorView().requestLayout();
                getWindow().getDecorView().invalidate();
            }
        }
    };

您可能想知道我为什么要调用requestLayout()和invalidate(),只需查看bringToFront()的文档。