为什么棒棒糖上的CardViews之间没有空间?


79

我尝试使用,CardView并且它在5.0以下都可以正常工作,但是在Lollipop上看起来很奇怪。

在此处输入图片说明

在此处输入图片说明

<?xml version="1.0" encoding="utf-8"?>
<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="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="200dp">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="card1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="200dp">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="card2"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.CardView>
</LinearLayout>

使用时,我遇到相同的问题RecyclerView,如果它在Lollipop上运行,是否应该添加一些内容?


1
LinearLayout在卡片之间添加
AndresCárdenas2014年

Answers:


205

将此设置为CardView

app:cardUseCompatPadding="true"

从文档:

还要在API v21 +中添加填充以具有与以前版本相同的度量。


1
我改用“ app”命名空间。是否仍使用“ card_view”?
wsgeorge 2015年

1
@wsgeorge来自Android文档,但我已将其编辑为更友好的应用程序名称空间。
tomrozb

看起来更好,但是如何删除分隔线?
没有消息

@nonews您可以尝试android:divider="@null"
SREE


13

第一张图片是即时贴视图的预期行为。当卡片抬高时,阴影会落在底层。在棒棒糖之前的设备中,高度是通过添加填充来实现的。因此预棒棒糖设备在卡片视图周围会有填充。

在L之前,CardView在其内容中添加填充并在该区域绘制阴影。此填充量等于侧面的maxCardElevation +(1-cos45)* cornerRadius和顶部和底部等于maxCardElevation * 1.5 +(1-cos45)* cornerRadius。


所以我们在编辑器中看到的cardview的大小不是我们在棒棒糖下方时可以使用的实际大小,它的一部分用于添加填充,并且在棒棒糖上布局的大小与实际大小相同,似乎给它一个填充看起来更好,但是我应该怎么做将它们分开呢?
cajsaiko 2014年

您在编辑器中看到的就是您真正获得的。要在所有屏幕上的卡之间具有相同的边距。如果API杠杆为21或更高,请设置边距
空指针

5
这个答案是正确的。除此之外,如果不增加值21的边距来使UI保持一致,则可以将compat padding设置为true,以便它也将在L中添加相同的填充。 developer.android.com/reference/android/support/v7/widget/...
yigit

@billgates在添加了保证金后,lollpop和pre-lollpop上的cardview都不错,感谢您的回答!
cajsaiko 2014年

1
是否可以去除棒棒糖前设备上的填充物?
user2456977

5

您必须添加app:cardUseCompatPadding="true"Cardview。但是,仅添加它可能会给您带来错误。为了避免这种错误,你也必须添加xmlns:app="http://schemas.android.com/apk/res-auto"到您的CardView

例如,

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:cardUseCompatPadding="true">

    // Other views here

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

有些会添加card_view:cardUseCompatPadding="true"xmlns:card_view="http://schemas.android.com/apk/res-auto"而不是上面提到的那些。两种方法都是正确的。

如果您想了解更多关于应用(Android版)的XML,请通过这个答案

尽管先前的答案可以解决问题,但它们并未解释每个属性的作用。因此,为了更有助于回答寻求者,

cardPreventCornerOverlap 属性会在v20及更高版本上为CardView添加填充,以防止Card内容和圆角之间的交集。

cardUseCompatPadding 属性还会在API v21 +中添加填充,以便与以前的版本具有相同的度量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.