Ich habe eine Liste von Beiträgen und die meisten von ihnen sind Bilder (einfach gesagt, es ist Posts wie G + oder FB-Anwendungen). Jeder Post-Eintrag hat ein Bild-Seitenverhältnis, so dass ich die Bildhöhe basierend auf der Breite einstellen kann, noch bevor das Bild vom Server geladen wurde, so dass sich das Kartenlayout nicht ändern würde.Breite von CardView in Adapter.onBindViewHolder
Das Problem ist layout_width="match_parent"
für sowohl Karte und Post-Image festgelegt. Wenn ich die Breite von Cardview bekomme, ist es Null. Also kann ich die Höhe nicht berechnen.
Für jetzt die einzige Lösung, die ich sehe, ist die Breite des übergeordneten Containers (RecyclerView) zu nehmen und alle Polsterungen abzuziehen, aber es sieht nicht wie eine gute Lösung aus.
Gibt es einen anderen Weg, es zu tun? Hier
ist ein Beispiel für Adaptercode
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
....
int width = holder.itemView.getWidth();
....
//do some calculations
}
Layouts (ohne irrelevante Teile)
<?xml version="1.0" encoding="utf-8"?>
<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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:foreground="?android:attr/selectableItemBackground"
card_view:cardBackgroundColor="#ffffff"
card_view:cardCornerRadius="3dp">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/includedPost"
layout="@layout/post_details" />
</RelativeLayout>
</android.support.v7.widget.CardView>
includedPost:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/postImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/commenterImage"
android:minHeight="120dp"
android:scaleType="centerCrop" />
</RelativeLayout>
Können Sie einen Teil des Codes, wo Sie getWidth-Methode aufrufen (mit einem 0-Ergebnis)? –
Meine Frage mit Beispielcode – Andrew
aktualisiert Vielleicht könnten Sie versuchen, getWidth() -Methode in [onViewAttachedToWindow] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#onViewAttachedToWindow) aufzurufen (VH)) gemäß dem Dokument: "Dies kann als ein vernünftiges Signal verwendet werden, dass die Ansicht vom Benutzer gesehen wird" –