J'ai un fragment avec contient un RecyclerView avec 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" />
L'élément dans RecyclerView est un CardView également avec 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>
Je gonfle la vue de l'article comme ci-dessous:
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;
}
Mais lorsque j'exécute l'application, CardView est rendu sous la forme wrap_content comme indiqué ci-dessous:
Notez que cela a été exécuté sur un émulateur, pas sur un appareil réel.
Est-ce que je fais quelque chose de mal ou est-ce un bug?
android
android-layout
android-5.0-lollipop
android-recyclerview
android-cardview
ProgrAmmar
la source
la source
Réponses:
Les documents pour
inflate
:Il est ici important de ne pas fournir vrai, mais ne fournir le parent:
Fournir la
parent
vue permet au gonfleur de savoir quels paramètres de disposition utiliser. Fournir lefalse
paramètre lui dit de ne pas encore l' attacher au parent. C'est ce que laRecyclerView
volonté fera pour vous.la source
layout_width
étaitwrap_content
. C'est bizarre car cela ne devrait pas affecter l'affichage de la liste! Donc, je crois comprendre que lorsque vous fournissez false comme paramètre au layoutinflater, le ListView ajoute les éléments de liste au ListView avec des paramètres de disposition correspondant au ListView lui-même! : 0ViewHolder onCreateViewHolder(...) { View v = new MyItemView(parent.getContext); return new ViewHolder(v); }
Utilisez RelativeLayout comme parent immédiat de CardView.
la source
Cela a fonctionné pour moi,
la source
La façon dont je l'ai fait est:
Explication: Dans votre onCreateViewHolde, une fois que vous obtenez la vue carte, obtenez la largeur de l'écran, puis définissez le paramètre de disposition en conséquence pour la vue carte.
la source
Cela semble être résolu dans
'com.android.support:recyclerview-v7:23.2.1'
Voir: RecyclerView wrap_content pour d'autres discussions.
la source
Définissez simplement de nouveaux paramètres de mise en page
la source
L'implémentation par défaut force l'utilisation de wrap_content dans le gestionnaire de mise en page par défaut:
Tout ce que vous avez à faire est de remplacer cette méthode dans votre LayoutManager comme ceci:
la source
Cela fonctionne pour moi
la source
Utilisez card_view: contentPadding avec une valeur négative
Ça a marché pour moi
la source
Enveloppez
CardView
dans une mise en page qui a une largeur:match_parent
la source