使用单个CardView的RecyclerView

时间:2015-11-16 00:32:54

标签: android android-recyclerview android-cardview

我想达到以下效果:

enter image description here

它基本上是一个驻留在单个CardView中的列表。由于它是一张卡片,因此可以上下滑动,使其看起来不错。使用ScrollView和LinearLayout很容易实现。但是当列表中有很多元素时,该解决方案会出现性能问题,因为所有元素的视图都在内存中。有没有办法使用RecyclerView实现这一目标?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

我尝试使用项目装饰,它可以工作。它基本上是来自cardview本身的改编代码以及它如何吸引它的影子。

CardViewDecoration Source

下面的示例使用了一些额外的装饰(边距,分隔符和标题背景),但这可以看起来像是使用任何其他视图或布局。

This is how it looks

答案 1 :(得分:0)

对于那些正在寻找实现此效果的解决方案的人,您只需创建一个CardView并将其属性(Card的高程,背景,UseCompatPadding ...)设置为您的RecyclerView。像这样的东西:

private void init() {
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.addItemDecoration(
        new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
    setCardViewBackgroundToRecyclerView(recyclerView);

    List<String> data = new ArrayList<>();
    for (int i = 0; i < 30; i++) {
        data.add("Item " + i);
    }
    adapter = new TestAdapter(data);
    recyclerView.setAdapter(adapter);
}

private void setCardViewBackgroundToRecyclerView(RecyclerView recyclerView) {
    CardView cardView = new CardView(this);
    cardView.setCardBackgroundColor(ContextCompat.getColor(this, R.color.white));
    cardView.setUseCompatPadding(true);
    cardView.setPreventCornerOverlap(false);
    int cardShadow = (int) cardView.getCardElevation();
    recyclerView.setPadding(cardView.getContentPaddingLeft() + cardShadow,
        cardView.getContentPaddingTop() + cardShadow + 3,
        cardView.getContentPaddingRight() + cardShadow,
        cardView.getContentPaddingBottom() + cardShadow + 3);
    ViewCompat.setElevation(recyclerView, cardView.getCardElevation());
    recyclerView.setBackground(cardView.getBackground());
}

结果: enter image description here