使用RecyclerView和CardView

13

我有一个包含卡片项的RecyclerView。在早期的设备上它看起来很好,但在Lollipop设备上子卡片之间没有任何间距。我尝试使用margin和padding,但这并没有帮助解决问题。当我在Lollipop设备上使用margin时,它看起来很好,但是在早期设备上使用同样的margin时间距非常大。 再次强调:为什么会存在不同的间距?我应该使用哪个属性来解决这个问题?

3个回答

22
这是因为在L及以上版本中,阴影位于视图边界之外,但在L以下版本中,阴影位于视图内部(不幸的是,在L之前没有真正的阴影支持)。
如果您想让CardView在L及以上版本上具有相同的间距,请将cardUseCompatPadding设置为true。

15

yigit的回答很有帮助,但没有太多细节,因此我在这里为以后查看此帖子的用户添加了一些内容。

这是我让它工作的示例(从yigit的回答中链接的android网站并不明显)。

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:layout_marginLeft="@dimen/activity_vertical_margin"
    android:layout_marginRight="@dimen/activity_vertical_margin"
    android:layout_marginTop="2dip"
    android:layout_marginBottom="2dip"
    card_view:cardUseCompatPadding="true">

    // Other layouts and views here

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

card_view需要加下划线,并使用res-auto模式,这一点并不明显。

Material Design培训中有一个很好的例子。


1
你的CardView缺少一个闭合标签。我想修复它,但我至少需要编辑6个字符:(而且我没有想到其他可以更改的内容) - 如果你能纠正它就太好了:) - AgentKnopf
1
Jepp看起来很不错,感谢你提供了详细的答案:)!虽然我不得不删除那个card_view:cardUseCompatPadding - 因为它无法正确解析。我不确定那是因为库在当时丢失了,但如果它真的不起作用,我会回到你这里。虽然我认为它可能与另一个问题有关,如果你测试过了,应该没问题吧。 - AgentKnopf

1

我曾经遇到了同样的问题。我不得不创建一个layout-v21文件夹,这将被lollipop设备使用,并复制布局,添加所需的边距/填充以正确地间隔它们。

这样,当你的应用在lollipop上启动时,布局将从layout-v21文件夹中读取,同时正确的空格被添加,而其他任何设备都将去你的标准布局文件,无需显式地设置空格。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接