Saya memiliki fragmen berisi RecyclerView dengan layout_width = "match_parent":
<android.support.v7.widget.RecyclerView 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:layout_gravity="center"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity$PlaceholderFragment" />
Item di RecyclerView adalah CardView juga dengan layout_width = "match_parent":
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp"
card_view:cardCornerRadius="4dp">
<TextView
android:layout_gravity="center"
android:id="@+id/info_text"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
android:textAppearance="?android:textAppearanceLarge"/>
</android.support.v7.widget.CardView>
Saya memekarkan tampilan item seperti di bawah ini:
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
CardView v = (CardView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_listitem, null, true);
ViewHolder vh = new ViewHolder(v);
return vh;
}
Tetapi ketika saya menjalankan aplikasi, CardView dirender sebagai wrap_content seperti yang ditunjukkan di bawah ini:
Perhatikan bahwa ini dijalankan di emulator, bukan perangkat sebenarnya.
Apakah saya melakukan sesuatu yang salah, atau apakah itu bug?
Jawaban:
Dokumen untuk
inflate
:Hal ini penting di sini untuk tidak memasok benar, tapi jangan memasok orang tua:
Menyediakan
parent
View memungkinkan inflater mengetahui layoutparams apa yang akan digunakan. Memasokfalse
parameter memberi tahu untuk tidak melampirkannya ke induk dulu. Itulah yangRecyclerView
akan dilakukan untuk Anda.sumber
layout_width
nyawrap_content
. Aneh karena ini seharusnya tidak memengaruhi tampilan daftar! Jadi pemahaman saya adalah bahwa ketika Anda memberikan false sebagai parameter ke layoutinflater, ListView menambahkan item daftar ke ListView dengan parameter layout yang cocok dengan ListView itu sendiri! : 0ViewHolder onCreateViewHolder(...) { View v = new MyItemView(parent.getContext); return new ViewHolder(v); }
Gunakan RelativeLayout sebagai induk langsung dari CardView.
sumber
Ini berhasil untuk saya,
sumber
Cara saya melakukannya adalah:
Penjelasan: Dalam onCreateViewHolde Anda setelah Anda mendapatkan tampilan kartu, dapatkan lebar layar dan kemudian setel parameter tata letak yang sesuai untuk tampilan kartu.
sumber
Ini tampaknya diperbaiki di
'com.android.support:recyclerview-v7:23.2.1'
Lihat: RecyclerView wrap_content untuk diskusi lebih lanjut.
sumber
Cukup setel parameter tata letak baru
sumber
Implementasi default memaksa penggunaan wrap_content di pengelola layout default:
Yang harus Anda lakukan adalah mengganti metode ini di LayoutManager Anda seperti ini:
sumber
Ini berhasil untuk saya
sumber
Gunakan card_view: contentPadding dengan nilai negatif
Itu berhasil untuk saya
sumber
Bungkus
CardView
dalam Layout yang memiliki lebar:match_parent
sumber