24

我正在尝试以主题来展示其中MapFragmentAndroid Maps v2 API一个。这工作正常。然而,地图得到了一个黑暗的覆盖:Activity@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar

对话

当我将主题更改为 时@android:style/Theme.DeviceDefault.Light.NoActionBar,地图将按原样显示:

普通的

这是我的 xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/mapfragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        class="com.google.android.gms.maps.MapFragment" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="HELLO"
        android:textSize="@dimen/textsize_large" />

</LinearLayout>

这里发生了什么?

4

5 回答 5

19

我遇到了同样的问题。经过一番研究,我发现了两个黑客:

  • 在 styles.xml 中为您的主题添加此参数:
    <item name="android:backgroundDimEnabled">false</item>

不好的部分:它删除了活动后面的黑色覆盖层。

  • 为地图对象设置顶部的 z 顺序:
    GoogleMapOptions googleMapsOptions = new GoogleMapOptions();
    googleMapsOptions.zOrderOnTop( true );
    MapFragment mapFragment = MapFragment.newInstance(googleMapsOptions);

不好的部分:地图位于缩放控件和 MyLocation 按钮的上方。

就个人而言,我选择第一个解决方案。
希望这有帮助!

链接到源

于 2013-04-24T09:19:36.440 回答
11

对于DialogFragment

getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
于 2015-08-01T10:07:27.347 回答
1

要添加到Audrel 的解决方案,可以在显示地图时动态取消对话框窗口的暗淡,并在地图消失时将其调暗(例如,当您的对话框有多个页面时,其中一个是地图):

private float mDimAmount;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WindowManager.LayoutParams params = getWindow().getAttributes();
    mDimAmount = params.dimAmount; // remember original dim amount
    ...
}

private void undim() {
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.dimAmount = 0.0f;
    getWindow().setAttributes(params);
}

private void dim() {
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.dimAmount = mDimAmount;
    getWindow().setAttributes(params);
}

仍然只是另一种解决方法,而不是解决根本原因......

于 2015-09-10T06:23:36.453 回答
0

根据您在对话框中对地图的用途,如果您不需要任何地图控件,则可以使用liteMode其中仅显示地图图像的地图图像以及您加载的任何位置。它没有这个 z 层叠加问题。

您可以将其添加到MapView布局 xml:

map:liteMode="true"

这对我有用,因为我不希望我的地图是交互式的。

您可以在此处阅读 Google 文档:https ://developers.google.com/maps/documentation/android-api/lite

于 2016-05-12T21:40:56.353 回答
0

只需将此行添加到您的样式中!

    <item name="android:backgroundDimEnabled">false</item>

这是我的风格 :

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/dark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="windowActionBar">false</item>
</style>
于 2017-07-24T15:07:05.127 回答