我希望我的应用程序有一个用户可以滚动的卡列表,单击操作等.具体来说,我想在支持库中使用
android.design.CardView类.
据我所知,有关SO的问题,但它并没有解决我的问题.关于这个问题的解决方案我要么说要使用列表并在每个项目中添加类似卡片的背景,请简要提及CardViews(即仅提及它们的存在)或依赖第三方库.
我想知道是否有可能只使用核心android API和支持库在RecyclerView中自行垂直滚动卡片列表. (但是删除任何使它看起来像列表的分隔符或其他东西都在卡片后面)这可能吗?
解决方法
基于你希望有一个CardViews列表….你可以在你的row_layout.xml中定义如下代码:
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView android:background="?android:attr/selectableItemBackground" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/cv"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:clickable="true" android:padding="16dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/person_photo" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginRight="16dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/person_name" android:layout_toRightOf="@+id/person_photo" android:layout_alignParentTop="true" android:textSize="30sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/person_age" android:layout_toRightOf="@+id/person_photo" android:layout_below="@+id/person_name" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" €" android:id="@+id/textView" android:layout_marginLeft = "10dp" android:layout_below="@+id/person_name" android:layout_toEndOf="@+id/person_age" /> </RelativeLayout> </android.support.v7.widget.CardView>
然后你的布局包含RecyclerView:
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <include android:id="@+id/toolBar" layout="@layout/toolbar_top" app:layout_scrollFlags="scroll|enterAlways|snap"/> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.SwipeRefreshLayout android:layout_width="match_parent" android:id="@+id/swipe" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_height="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerList" android:layout_width="match_parent" android:background="@color/colorAccent" android:layout_height="wrap_content"/> </android.support.v4.widget.SwipeRefreshLayout> </android.support.design.widget.CoordinatorLayout>
在您的适配器中,CardView可以定义为根元素:
public class Adapter extends RecyclerView.Adapter<Adapter.StockViewHolder>{ List<Stock> stocks; public Adapter(List<Stock> stocks){ this.stocks = stocks; } @Override public StockViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false); StockViewHolder pvh = new StockViewHolder(v); return pvh; } @Override public void onBindViewHolder(StockViewHolder holder,int position) { holder.stockName.setText(stocks.get(position).getName()); holder.stockPrice.setText(stocks.get(position).getPrice()); Ion.with(holder.stockPhoto).error(R.mipmap.ic_launcher).load(stocks.get(position).getPhotoId()); } @Override public int getItemCount() { return stocks.size(); } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } public static class StockViewHolder extends RecyclerView.ViewHolder { CardView cv; TextView stockName; TextView stockPrice; ImageView stockPhoto; StockViewHolder(View itemView) { super(itemView); cv = (CardView)itemView.findViewById(R.id.cv); stockName = (TextView)itemView.findViewById(R.id.person_name); stockPrice = (TextView)itemView.findViewById(R.id.person_age); stockPhoto = (ImageView)itemView.findViewById(R.id.person_photo); } } }
这会给你这个结果:
这是CardViews的实际列表.
希望能帮助到你!