我想达到以下效果:
它基本上是一个驻留在单个CardView中的列表。由于它是一张卡片,因此可以上下滑动,使其看起来不错。使用ScrollView和LinearLayout很容易实现。但是当列表中有很多元素时,该解决方案会出现性能问题,因为所有元素的视图都在内存中。有没有办法使用RecyclerView实现这一目标?
任何帮助将不胜感激!
答案 0 :(得分:0)
我尝试使用项目装饰,它可以工作。它基本上是来自cardview本身的改编代码以及它如何吸引它的影子。
下面的示例使用了一些额外的装饰(边距,分隔符和标题背景),但这可以看起来像是使用任何其他视图或布局。
答案 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());
}