Ich habe ein Fragment mit enthält eine RecyclerView mit 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" />
Das Element in der RecyclerView ist eine CardView, ebenfalls mit 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>
Ich blase die Artikelansicht wie folgt auf:
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;
}
Wenn ich die App ausführe, wird CardView wie folgt dargestellt: wrap_content:
Beachten Sie, dass dies auf einem Emulator ausgeführt wurde, nicht auf einem echten Gerät.
Mache ich etwas falsch oder ist es ein Fehler?
Antworten:
Die Dokumente für
inflate
:Es ist hier wichtig, nicht wahr zu liefern, sondern sie die Eltern liefern:
Wenn Sie die
parent
Ansicht bereitstellen, weiß der Inflater, welche Layoutparameter verwendet werden sollen. Wenn Sie denfalse
Parameter angeben , wird er angewiesen , ihn noch nicht an das übergeordnete Element anzuhängen. Das ist es, was derRecyclerView
Wille für Sie tun wird.quelle
layout_width
warwrap_content
. Es ist komisch, weil dies die Listenansicht nicht beeinflussen sollte! Mein Verständnis ist also, dass, wenn Sie dem Layoutinflater false als Parameter angeben, die ListView die Listenelemente zur ListView hinzufügt, wobei die Layoutparameter mit der ListView selbst übereinstimmen! : 0ViewHolder onCreateViewHolder(...) { View v = new MyItemView(parent.getContext); return new ViewHolder(v); }
Verwenden Sie RelativeLayout als unmittelbares übergeordnetes Element von CardView.
quelle
Das hat bei mir funktioniert,
quelle
Ich habe es so gemacht:
Erläuterung: Wenn Sie in Ihrer onCreateViewHolde die Kartenansicht erhalten haben, ermitteln Sie die Bildschirmbreite und legen Sie den Layoutparameter für die Kartenansicht entsprechend fest.
quelle
Dies scheint behoben zu sein
'com.android.support:recyclerview-v7:23.2.1'
Weitere Informationen finden Sie unter: RecyclerView wrap_content .
quelle
Stellen Sie einfach neue Layoutparameter ein
quelle
Die Standardimplementierung erzwingt die Verwendung von wrap_content im Standardlayoutmanager:
Alles, was Sie tun müssen, ist, diese Methode in Ihrem LayoutManager wie folgt zu überschreiben:
quelle
Das funktioniert bei mir
quelle
Verwenden Sie card_view: contentPadding mit einem negativen Wert
Es hat bei mir funktioniert
quelle
Wickeln Sie
CardView
ein Layout mit einer Breite ein:match_parent
quelle