Sto usando verticale StaggeredGridLayoutManager per visualizzare alcune miniature. Ogni riga contiene un cardview con larghezza 1 pollice e altezza 150dp. La mia domanda è: come posso impostare il conteggio dello span della griglia sfalsato per usare la larghezza fisica disponibile dello schermo?Come impostare il conteggio dello span della griglia sfalsato per utilizzare la larghezza dello schermo disponibile?
CardViewRow.xml
<?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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="vertical"
card_view:cardCornerRadius="0dp"
card_view:cardUseCompatPadding="true" >
<LinearLayout
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/card_selector"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/thumbnail"
android:layout_width="300dp"
android:layout_height="150dp"
android:scaleType="centerCrop"/>
<LinearLayout
android:weightSum="2"
android:padding="5dp"
android:layout_gravity="bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#80000000">
<TextView
android:id="@+id/size_txt"
android:layout_weight="1"
android:textSize="12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/silver"
android:gravity="left"/>
<TextView
android:layout_weight="1"
android:gravity="right"
android:textColor="@color/silver"
android:id="@+id/time_txt"
android:textSize="12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<View
android:id="@+id/selector"
android:visibility="invisible"
android:background="#950096ff"
android:layout_width="match_parent"
android:layout_height="match_parent">
</View>
</FrameLayout>
<TextView
android:id="@+id/title_txt"
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="5" />
</LinearLayout>
</android.support.v7.widget.CardView>
Attualmente sto usando questo codice. (Credits: mstrengis)
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int cardWidth =(int) metrics.xdpi; //CardWidth==1Inch.
int spans = (int) Math.floor(mRecyclerView.getContext().getResources().getDisplayMetrics().widthPixels/(float) cardWidth);
sglm.setSpanCount(spans);
/* Questo funziona perfettamente sul mio Nexus 5 e scheda di Samsung, ma sul mio cellulare Lenovo la larghezza della carta è inferiore a 1,5 cm e conta arco è più di quello che mi aspettavo * /.
hai controllato doc sviluppatore Android per questo layout? [StaggeredGridLayoutManager] (https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html) dai un'occhiata a questa funzione setGapStrategy (int) – HMG