打开抽屉菜单时,如果后面是Google地图v2版本,则出现问题。应显示在屏幕后方的地图会覆盖在所有内容上面。
现在,我可以通过在抽屉菜单打开时隐藏地图并在关闭时显示它来绕过此问题,但如果有更优雅的解决方案,我想知道是否有人想到了?
打开抽屉菜单时,如果后面是Google地图v2版本,则出现问题。应显示在屏幕后方的地图会覆盖在所有内容上面。
现在,我可以通过在抽屉菜单打开时隐藏地图并在关闭时显示它来绕过此问题,但如果有更优雅的解决方案,我想知道是否有人想到了?
只需使用FrameLayout包装SupportMapFragment,并在上方放置透明视图,如下所示:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Map fragment -->
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
<!-- Transparent view -->
<View
android:layout_width="match_parent"
android:layout_height="match_parent" />
已测试通过 Android 4.0.4 - 对我来说工作正常
我在ICS 4.0.4上遇到了同样的问题。jfeinstein10的github帖子中提到的解决方案对我似乎没有用。但是我找到了一个变通方法,即使它不是最好的。
当创建DrawerToggle对象时,我重写了这个事件。
@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
super.onDrawerSlide(drawerView, slideOffset);
mDrawerLayout.bringChildToFront(drawerView);
mDrawerLayout.requestLayout();
mDrawerLayout.setScrimColor(Color.TRANSPARENT);
}
使用bringChildToFront和requestLayout方法可以解决抽屉渲染问题,而使用setScrimColor则可以消除阴影。可惜我还没有找到正确渲染阴影的解决方法。希望这能帮到你。
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
DrawerLayout Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout);
mDrawerToggle = new ActionBarDrawerToggle(this, Drawer, toolbar, R.string.openDrawer, R.string.closeDrawer) {
@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
super.onDrawerSlide(drawerView, slideOffset);
Drawer.bringChildToFront(drawerView);
Drawer.requestLayout();
Drawer.setScrimColor(Color.TRANSPARENT);
}
};