17

在姜饼上打开抽屉时我遇到了这个问题,后面是谷歌地图 v2。应该在屏幕后面的地图占据了一切之上。

现在我可以通过在抽屉打开时隐藏地图并在关闭时显示它来绕过这个,但是如果有人想出任何方法,我正在寻找更优雅的解决方案?

地图覆盖导航抽屉

4

4 回答 4

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

于 2014-11-20T15:15:51.340 回答
7

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

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

  • 扩展谷歌地图并使其更频繁地重绘每个视图
  • 将顶部参数上的地图 z 索引设置为 true
  • 在谷歌地图视图上放置透明覆盖
于 2013-08-03T06:27:39.610 回答
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 将摆脱阴影。太糟糕了,我还没有找到正确渲染阴影的解决方法。希望这可以帮助。

于 2013-09-12T23:58:28.170 回答
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);

                        }
                    };
于 2015-03-27T13:56:08.587 回答