CardView填充/间距在不同的API级别上有所不同

时间:2016-06-29 02:34:18

标签: java android xml android-studio android-cardview

我正在多个设备上测试我的应用程序,并注意到使用CardView,某些设备在每个CardView之间呈现间距。

我正在尝试隔离问题,看起来API 23不包含任何间距,而API< 23呈现某种填充/间距。

请注意,我已经尝试了提议的解决方案here,但它无效。它在XML中提出了以下内容:

app:cardUseCompatPadding="true"

API 23

enter image description here

API< 23

enter image description here

2 个答案:

答案 0 :(得分:2)

问题在于,在api-21及更高版本上支持CardViews,而在KitKat及更早版本中,它们是伪造的#34;由支持库。

我过去成功完成的工作是使用单独的布局文件,只需手动像素推送它们直到它看起来正确。

例如,在res/layout中,你有这个xml:

<android.support.v7.widget.CardView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:cardview="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/my_card"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_marginRight="0dip"
     android:layout_marginLeft="0dip"
     android:layout_marginTop="1dip"
     android:layout_marginBottom="1dip"
     cardview:cardBackgroundColor="@color/even_light_gray"
     android:foreground="@drawable/card_foreground"
     cardview:cardCornerRadius="1dp" >

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
        android:paddingTop="4dp" >

        <!-- .......... -->

        </LinearLayout>
</android.support.v7.widget.CardView>

然后,在res/layout-21中,您的此布局具有不同的边距和填充值:

<android.support.v7.widget.CardView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:cardview="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/my_card"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_marginRight="1dip"
     android:layout_marginLeft="1dip"
     android:layout_marginTop="4dip"
     android:layout_marginBottom="4dip"
     cardview:cardBackgroundColor="@color/even_light_gray"
     android:foreground="@drawable/card_foreground"
     cardview:cardCornerRadius="1dp" >

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingLeft="4dp"
        android:paddingRight="4dp"
        android:paddingTop="4dp" >

        <!-- .......... -->

        </LinearLayout>
</android.support.v7.widget.CardView>

答案 1 :(得分:2)

我发现这个...... 在cardview attr中使用它,
app:cardPreventCornerOverlap="false"
并在不同的android os版本中使用它 app:cardMaxElevation="0dp" app:cardElevation="0dp"
在pre-L中,使它们为0dp,在api21或之后,使它们为非零