您没有发布完整的布局源代码,但我遇到了同样的问题,我认为原因是相同的。我有一个类似的项目列表,每一行都是一个自定义视图,它扩展了 LinearLayout 并扩展了一些自定义布局(我们称之为 row_item.xml)。列表布局如下所示:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.example.android.RowItem
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.example.android.RowItem
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
RowItem 布局 (row_item.xml) 看起来像这样:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:elevation="10dp"
android:outlineProvider="bounds">
...
</LinearLayout>
问题是 RowItem 是单独的 LinearLayout 并使用以下代码膨胀 row_item.xml:
LayoutInflater.from(context).inflate(R.layout.row_item, this, true);
这实际上用另一个 LinearLayout 的高程包裹了 LinearLayout,创建了一个类似这样的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:elevation="10dp"
android:outlineProvider="bounds">
...
</LinearLayout>
</LinearLayout>
在由另一个 LinearLayout 包裹的 LinearLayout 上设置高度会导致这些奇怪的阴影。解决方案是在外部 LinearLayout 上设置高程。更好的解决方案是通过在 row_item.xml 中将 <LinearLayout> 替换为 <merge> 并在自定义视图的代码中以编程方式设置高度来摆脱双重布局。
如果您没有使用自定义视图但遇到此问题,您可能没有在项目的最外层容器上设置高度。