我正在为我的应用程序开发暗模式,其中包含一个带有许多标记的地图。因此,我必须使谷歌地图的自定义信息窗口变暗。由于这些窗口默认具有白色边距,因此我必须从头开始创建一个。
这是自定义窗口:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:background="#ffffff">
......
</LinearLayout>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@drawable/custom_info_window_triangle"
android:rotation="180"/>
<View
android:layout_width="1dp"
android:layout_height="5dp"/>
</LinearLayout>
对于三角形,我发现这种方法是最好的:https://stackoverflow.com/a/31704460/6612631。
直到这里,一切都按预期工作。问题出在阴影上。我尝试使用卡片视图,但设置 cardElevation 不显示任何阴影。
稍后编辑:这是我尝试在其中放置第二个线性布局的卡片视图:
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="#ffffff"
card_view:cardCornerRadius="8dp"
card_view:cardElevation="4dp">
</androidx.cardview.widget.CardView>
我遇到了在地图上自定义信息窗口中显示阴影的相同问题, 我通过使用可绘制对象作为父布局的背景来解决。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:drawable/dialog_holo_light_frame"
android:orientation="vertical"
android:gravity="center">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:background="#ffffff">
......
</LinearLayout>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@drawable/custom_info_window_triangle"
android:rotation="180"/>
<View
android:layout_width="1dp"
android:layout_height="5dp"/>
</LinearLayout>
我使用了安卓默认可绘制对象,即九个补丁图像:android:background="@android:drawable/dialog_holo_light_frame">
您可以根据需要使用它,也可以创建一个这样的图像 带有阴影,并添加为线性布局背景而不是卡片视图。 希望这有帮助!