我正在尝试在MapFragment
中使用Android 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>
这里发生了什么?
答案 0 :(得分:19)
我遇到了同样的问题。经过一番研究,我发现了两个黑客:
<item name="android:backgroundDimEnabled">false</item>
不良部分:删除活动背后的黑色叠加层。
GoogleMapOptions googleMapsOptions = new GoogleMapOptions();
googleMapsOptions.zOrderOnTop( true );
MapFragment mapFragment = MapFragment.newInstance(googleMapsOptions);
错误部分:地图位于“缩放”控件和“我的位置”按钮上方。
Personnaly,我选择了第一个解决方案 希望这有帮助!
答案 1 :(得分:11)
DialogFragment
:
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
答案 2 :(得分:1)
要添加到Audrel's solution,可以在显示地图时动态取消对话框的窗口,并在地图消失时将其调暗(例如,当对话框有多个页面时,其中一个是地图):
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);
}
仍然只是另一种解决方法,而不是解决根本原因......
答案 3 :(得分:0)
根据您在对话框中对地图的用途,如果您不需要任何地图控件,则可以使用liteMode
,其中只显示地图的图像你加载的位置。它没有z层重叠问题。
您可以将其添加到MapView
布局xml:
map:liteMode="true"
这对我有用,因为我不希望我的地图无论如何都是互动的。
您可以在此处阅读Google文档:https://developers.google.com/maps/documentation/android-api/lite
答案 4 :(得分: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>