2015-08-16 10 views
7

Tôi đang sử dụng StaggeredGridLayoutManager dọc để hiển thị một số hình thu nhỏ. Mỗi hàng có một cardview với chiều rộng 1 inch và chiều cao 150dp. Câu hỏi của tôi là Làm thế nào tôi có thể thiết lập số lượng khoảng trống lưới so le để sử dụng chiều rộng vật lý có sẵn của màn hình?Làm thế nào để thiết lập số lượng khoảng trống lưới so le để sử dụng chiều rộng màn hình có sẵn?

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> 

Hiện nay tôi đang sử dụng mã này. (Điểm Uy Tín: 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); 

/* Đây hoạt động hoàn hảo trên mối quan hệ của tôi và 5 tab samsung, Nhưng trên điện thoại lenovo tôi chiều rộng thẻ nhỏ hơn 1.5cm và đếm khoảng thời gian là nhiều hơn những gì tôi mong đợi * /.

+0

có bạn kiểm tra phát triển doc android cho bố trí này? [StaggeredGridLayoutManager] (https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html) hãy xem chức năng này setGapStrategy (int) – HMG

Trả lời

4
int spans = (int) Math.floor(recyclerView.getContext().getResources().getDisplayMetrics().widthPixels/(float) cardWidth); 
    RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); 
    if(layoutManager instanceof StaggeredGridLayoutManager) { 
     ((StaggeredGridLayoutManager) layoutManager).setSpanCount(spans); 
    } 

và sau đó sử dụng RecyclerView.ItemDecoration để thêm khoảng cách giữa các nhịp

+0

không hoạt động trên một số thiết bị lenovo –

+0

thử phương pháp này để tính toán pixel mật độ http://pastie.org/10378788 cardWidth = dp (75); // Aproximetly 1inch cardHeight = dp (150); – mstrengis

Các vấn đề liên quan