导航抽屉谷歌地图v2,阻止抽屉遮挡地图

17

打开抽屉菜单时,如果后面是Google地图v2版本,则出现问题。应显示在屏幕后方的地图会覆盖在所有内容上面。

现在,我可以通过在抽屉菜单打开时隐藏地图并在关闭时显示它来绕过此问题,但如果有更优雅的解决方案,我想知道是否有人想到了?

地图覆盖导航抽屉菜单

4个回答

13

只需使用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 - 对我来说工作正常


在我的情况下,在现有布局中添加一个透明视图,紧接在地图片段之后,效果非常好。 仅供历史记录,这最初在HTC Desire X 4.1.1上正常工作,但在Sony 4.0.0和HTC Desire SV 4.0.1上失败。现在,在任何地方都可以正常工作。 - Der Zinger

7

5

我在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则可以消除阴影。可惜我还没有找到正确渲染阴影的解决方法。希望这能帮到你。


3
你应该重写onDrawerSlide函数,并将抽屉移动到前面。
 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);

                        }
                    };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接