Android系统。奇怪的三角形阴影出现在循环视图列表的底部

时间:2017-10-06 15:40:55

标签: android layout android-recyclerview android-cardview

enter image description here

正如你在附加图像上看到的那样,我的卡片右侧有一个三角形阴影位于列表中。

我将所有三个的高程设置为0:

app:cardElevation="0dp"
card_view:cardElevation="0dp"
android:elevation="0dp"

我的所有名单都会发生这种情况。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您没有发布完整的布局源,但是我遇到了同样的问题,并且我认为原因是相同的。我有类似的项目列表,每行都是一个自定义视图,该视图扩展了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);

这实际上是通过ANOTHER 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>并在自定义视图的代码中以编程方式设置高程来摆脱双重布局。

如果您没有使用自定义视图,但遇到此问题,则可能未在商品的最外层容器上设置高程。