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

时间:2013-07-18 20:56:13

标签: android google-maps-android-api-2 navigation-drawer

我在姜饼上打开抽屉时有这个问题,后面是google map v2。应该在屏幕后面的地图是最重要的。

现在我可以通过在抽屉打开时隐藏地图并在关闭时显示它来绕过这一点,但如果有人提出任何问题,我会寻找更优雅的解决方案吗?

Map overlaying navigation drawer

4 个答案:

答案 0 :(得分:13)

使用FrameLayout包装SupportMapFragment并将透明View放在上面,如下所示:

<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测试 - 对我来说很好用

答案 1 :(得分:7)

google maps api v2和黑色空间存在错误。也许你有类似的问题。有关解决方案,请查看 https://github.com/jfeinstein10/SlidingMenu/issues/228 和这里: https://github.com/jfeinstein10/SlidingMenu/issues/168

据我所知,解决方案就是其中之一:

  • 扩展Google地图并让它更频繁地重绘每个视图
  • 将top param上的map z的索引设置为true
  • 在Google地图视图上添加透明叠加层

答案 2 :(得分:6)

我在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 :(得分: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);

                        }
                    };