-3

在Android中,我使用RecyclerView。對於RecyclerView的項目,我使用CardView作爲項目的佈局,下面的XML佈局:Android CardView裏面RecyclerView - cardElevation導致不必要的保證金和底部影子

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="0dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginTop="0dp" 
    app:cardElevation="2dp" 
    app:cardCornerRadius="0dp" 
    app:cardPreventCornerOverlap="false" 

    android:foreground="?attr/selectableItemBackground" 
    android:clickable="true" > 

    <LinearLayout 
     android:minHeight="48dp" 
     android:layout_marginTop="0dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_marginBottom="0dp" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    ....... 

    </LinearLayout> 
</CardView> 

我使用CardView從android.support.v7.widget.CardView

我設置了cardElevation="2dp", layout_marginBottom="0dp", layout_marginTop="0dp"。設置cardElevation使左側的影子,CardView的底部&。然後通過設置layout_marginBottom & layout_marginTop = 0dp,如果item不是列表中的最後一項,則它的底部陰影將爲disappear,因爲它由列表中的下一項(CardView)覆蓋。

以下是預期的UI行爲。整個監控列表看起來像單個CardView,但實際上它是一個RecyclerView,每個項目由CardView組成,只有底部的影子被下一個項目所覆蓋。這適用於Android的API 25(安卓7.1.2):

Correct Behaviour - Api 25

但在Android API 16(安卓4.1.2),並不如預期的結果。底部陰影(邊框)仍然可見,也看起來像是在每個項目之間添加了額外的邊距。

Wrong Behaviour - Api 16

不知道如何解決這個問題的Android 4.1.2?

+0

'Elevation'屬性僅適用於Android API超過21個。
檢查[this](https://stackoverflow.com/a/21445593/5402482)鏈接以獲得實現API 21以下所需效果的想法: –

+0

OP不問爲什麼'Elevation'不工作。 (她正在使用來自支持庫的'app:cardElevation',因此,在Android 4中查看提升效果是有意義的)她問爲什麼Android 6中的行之間有* no *空間,但Android 4中的行之間有空間。 –

回答

1

我的猜測是,您正在使用支持庫中的CardView。在不同版本的Android下有不同的卡片視圖實現。

我相信在Android L之前,庫會添加填充以保留用於陰影繪製的空間。

請檢查CardView inside RecyclerView has extra margins瞭解更多詳情。

相關問題