我想在我的应用中实施CardView
,以便所有ListView
项都是CardView
。是否像在ListView
中封装CardView
项XML一样简单?
答案 0 :(得分:31)
如果其他人遇到此问题,其他答案是正确的,但是您应该将CardView
放在FrameLayout中,并且应该使ListView
的分隔符透明。除非您在CardView
内使用,否则FrameLayout
的高程和边距属性将无效。
答案 1 :(得分:14)
是。在CardView
下面只是一个简单的FrameLayout
,您可以将其扩展为ListView
(或RecyclerView
)。
以下是一个例子:
<android.support.v7.widget.CardView
android:id="@+id/ly_root"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FEFEFE"
android:layout_margin="8dp"
app:cardCornerRadius="4dp">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_cover"
android:layout_width="wrap_content"
android:layout_height="160dp"
android:scaleType="centerCrop"
android:src="@drawable/placeholder"/>
...
</LinearLayout>
</android.support.v7.widget.CardView>
这就是这个例子的实际应用:
当然,您需要实现一个自定义适配器来将它们连接在一起。但这与任何自定义ListView
项目一样。它没什么特别的。
答案 2 :(得分:8)
将CardView与RecyclerView一起使用会更好,这是一个例子。
activity_main.xml(包含recyclerview)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</LinearLayout>
<强> cardview.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
card_view:cardCornerRadius="4dp"
android:layout_margin="10dp">
<TextView
android:id="@+id/text_cardview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp" />
</android.support.v7.widget.CardView>
<强> buid.gradle(模块:应用)强>
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:cardview-v7:23.0.+'
compile 'com.android.support:recyclerview-v7:23.0.+'
}
<强> RecyclerViewAdapter.java 强>
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
public ArrayList<String> myValues;
public RecyclerViewAdapter (ArrayList<String> myValues){
this.myValues= myValues;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View listItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview.xml, parent, false);
return new MyViewHolder(listItem);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.myTextView.setText(myValues.get(position));
}
@Override
public int getItemCount() {
return myValues.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private TextView myTextView;
public MyViewHolder(View itemView) {
super(itemView);
myTextView = (TextView)itemView.findViewById(R.id.text_cardview);
}
}
}
<强> MainActivity.java 强>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> myValues = new ArrayList<String>();
//Populate the ArrayList with your own values
myValues.add("KitKat");
myValues.add("Lollipop");
myValues.add("Marshmallow");
RecyclerViewAdapter adapter = new RecyclerViewAdapter(myValues);
RecyclerView myView = (RecyclerView)findViewById(R.id.recyclerview);
myView.setHasFixedSize(true);
myView.setAdapter(adapter);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
myView.setLayoutManager(llm);
}
}
有关详细信息,请参阅本教程:A Guide to Android RecyclerView and CardView
答案 3 :(得分:4)
是的,您可以将CardView
用于ListView中的列表项。但我建议您使用RecyclerView而不是ListView,因为它是ListView的更新版本。使用CardView检查this以查找RecyclerView。