Можно ли использовать картографию для элемента списка и как
Я хотел бы реализовать CardView
в своем приложении, чтобы все элементы ListView
были CardView
s. Это так же просто, как инкапсуляция элемента ListView
XML в CardView
?
Ответы
Ответ 1
Да. Под 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>
И вот этот пример живет в действии:
![enter image description here]()
Конечно, вам понадобится реализовать собственный адаптер, чтобы связать их вместе. Но это как с любым обычным элементом ListView
. В этом нет ничего особенного.
Ответ 2
В случае, если кто-то другой сталкивается с этим вопросом, другие ответы правильные, но тогда вы должны поместить свой CardView
в FrameLayout, и вы должны сделать прозрачный разделитель ListView
. CardView
атрибут высоты и поля не будет работать, если вы не используете его внутри FrameLayout
.
Ответ 3
Лучше использовать 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);
}
}
Обратитесь к этому руководству для получения дополнительной информации: Руководство по Android RecyclerView и CardView
Ответ 4
Да, вы можете использовать CardView
для элемента списка в ListView. Но я предлагаю вам использовать RecyclerView вместо ListView, так как это обновленная версия ListView. Проверьте этот для RecyclerView с CardView.