我有一个Navigation Drawer
问题
在我的导航抽屉应用程序中,有时抽屉显示在其他内容视图的后面。因此,只显示抽屉的一部分(其他部分被内容区域隐藏)。
我尝试了一切,但它不起作用。
drawer.bringToFront();
drawer.buildLayer();
drawer.clearFocus();
drawer.requestLayout();
drawer.forceLayout();
但在这种情况下,如果我触摸选项按钮或更改焦点,屏幕会刷新并显示抽屉。 所以我想知道当我触摸选项按钮时调用了哪种方法。然后我想我可以在抽屉打开时调用该方法 你先谢谢了。
答案 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()的文档。