Я хотел бы реализовать 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>
И вот этот пример живет в действии:
Конечно, вам понадобится реализовать собственный адаптер, чтобы связать их вместе. Но это как с любым обычным элементом 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.