2015-07-14 28 views
10

Tôi đang gặp vấn đề về việc thay đổi chiều cao Recycler dựa trên tổng số mục của nó. Những gì tôi đã cố gắng là sử dụng Layout Param như thế này:Android - làm thế nào để thay đổi chiều cao Recyclerview động?

 ViewGroup.LayoutParams params = myRecyclerView.getLayoutParams(); 
     params.height = itemHeight * numberOfItem; 
     myRecyclerView.requestLayout(); 

hoặc

 ViewGroup.LayoutParams params = new RecyclerView.LayoutParams(..WRAP_CONTENT, ...WRAP_CONTENT);; 
     params.height = itemHeight * numberOfItem; 
     myRecyclerView..setLayoutParams(params); 

Nhưng nó đã không làm việc. Tôi có thể làm như thế nào? Làm ơn giúp tôi !

+0

vâng, tôi quên thông báo điều đó. Lý do là tôi muốn sử dụng đa recyclerview tại thời điểm bên trong một scroolview. Và, nếu tôi đặt chiều cao của bất kỳ recyclerview để wrapcontent nó sẽ mất tất cả không gian toàn bộ, nhưng nó hoạt động khi tôi thiết lập một chiều cao cố định như 100dp cho ex. Vì vậy, tôi đang tìm cách thay đổi chiều cao của recyclerview dinamically. –

+0

trên thực tế, ứng dụng của tôi có biểu mẫu cho phép dữ liệu nhập của người dùng và anh ấy có thể thêm biểu mẫu mới nhiều như anh ấy muốn bằng cách nhấn nút "+". Vì vậy, tôi đang cố gắng cách mà khi ông nhấn nút "+" tôi sẽ thêm một mục để recyclerview, vì vậy tôi có thể kiểm soát tất cả mọi thứ thông qua recyclerview. Tại thời điểm này, để tiết kiệm thời gian, tôi chọn một cách khác để làm điều đó nhưng vẫn muốn biết làm thế nào có thể làm điều đó bằng cách này. Và có thể có rất nhiều người cũng muốn biết. –

+0

https://viksaaskool.wordpress.com/2015/05/08/adjust-recyclerview-item-height-example/ –

Trả lời

4

Tôi đã thử cách này. Nó đã làm việc. Có thể được giúp đỡ.

@Override 
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) { 

    //this change height of rcv 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    params.height =80; //height recycleviewer 
    feedListRowHolder.itemView.setLayoutParams(params); 

    FeedItem feedItem = feedItemList.get(i); 

    Picasso.with(mContext).load(feedItem.getThumbnail()) 
      .error(R.drawable.placeholder) 
      .placeholder(R.drawable.placeholder) 
      .into(feedListRowHolder.thumbnail); 

    feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle())); 
    feedListRowHolder.itemView.setActivated(selectedItems.get(i, false)); 

    feedListRowHolder.setClickListener(new FeedListRowHolder.ClickListener() { 
     public void onClick(View v, int pos, boolean isLongClick) { 
      if (isLongClick) { 

       // View v at position pos is long-clicked. 
       String poslx = pos + ""; 
       Toast.makeText(mContext, "longclick " + poslx, Toast.LENGTH_SHORT).show(); 

      } else { 
       // View v at position pos is clicked. 
       String possx = pos + ""; 
       Toast.makeText(mContext, "shortclick " + possx, Toast.LENGTH_SHORT).show(); 
       toggleSelection(pos); 
      } 
     } 
    }); 

} 
+0

hãy xem mã của bạn, có vẻ như bạn đang cố gắng thay đổi chiều cao của từng mục bên trong chế độ xem của người tái chế. Nhưng tôi muốn thay đổi chiều cao của recyclerview thay thế. –

+0

Bạn viết params.height = itemHeight * numberOfItem; Khi bạn biết số lượng các mục bạn có thể thiết lập chiều cao của recycleviewer. Nhưng bạn có thể muốn chiều cao cố định của mục một chiều cao thiết lập của recycleviewer. – eurosecom

7

Bạn nên sử dụng LayoutParams của quan điểm của cha mẹ trong setLayoutParams (params).

Ví dụ:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    > 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/images" 
     android:layout_width="wrap_content" 
     android:layout_height="360dp" 
     > 
    </android.support.v7.widget.RecyclerView> 
</Relativelayout> 

Thay đổi LayoutParams trong các mã.

RelativeLayout.LayoutParams lp = 
      new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 500); 
recyclerView.setLayoutParams(lp); 
+2

Tôi vừa thay đổi Linearlayout thành Relative rồi nó sẽ tự động cư trú. –

-2

Mã này hoạt động Tôi chắc chắn về điều đó

ViewGroup.LayoutParams params=recyclerview.getLayoutParams(); 
params.height=100; 
recyclerview.setLayoutParams(params); 

Một điều khác bạn có thể làm là tạo ra một bố trí tuyến tính như cha mẹ của quan điểm tái chế và sau đó tăng chiều cao năng động cho quan điểm cha mẹ

Xem xét XML sau đây

<LinearLayout 
     andorid:id=""@+id/yourLayoutId""> 

    <RecyclerView/> 

</LinearLayout 

Xem xét fol mã lowing

LinearLayout layout = (LinearLayout)findViewById(R.id.yourLayoutId); 
LinearLayout.LayoutParams lp = (LayoutParams) layout.getLayoutParams(); 
lp.height = 100; 
0

Nếu bạn chỉ muốn kích thước của người tái chế theo kích thước tự động theo số lượng mục thì tại sao bạn không đặt chiều cao RecyclerView là wrap_content.

Nếu bạn có nhiều ScrollView trong bố cục thì hãy thử gói RecyclerView trong NestScrollView và đặt chiều cao là wrap_content quá.

mã:

<android.support.v7.widget.RecyclerView 
       android:id="@+id/recyclerView" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       /> 
0

Mặc dù câu hỏi được hỏi khá nhiều thời gian trước đây, tôi đã tìm một số có thể tìm thấy câu trả lời này hữu ích.

Tôi có RecyclerView với bộ điều hợp.Chiều cao được thiết lập trong onBindViewHolder phương pháp adapter:

Layout:

<android.support.v7.widget.RecyclerView 
    android:id="@+id/container" 
    ... 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

Adaptor:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

public abstract static class ViewHolder extends RecyclerView.ViewHolder { 
    public ViewHolder(View itemView) { 
     super(itemView); 
    } 
    public abstract void setFixedHeight(); 
} 

@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); 

    return new ViewHolder(view) { 

     @Override 
     public void setFixedHeight() { 
      // magic happening here 
      ViewGroup.LayoutParams parentParams = parent.getLayoutParams(); 
      parentParams.height = 
       ((RecyclerView) parent).computeVerticalScrollRange() 
        + parent.getPaddingTop() 
        + parent.getPaddingBottom(); 
      parent.setLayoutParams(parentParams); 
     } 
    }; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.setFixedHeight(); 
    } 

// other methods here 
} 

Thiết adapter:

recyclerView.setAdapter(new MyAdapter(...));

Lưu ý: Sử dụng ((RecyclerView) parent).computeHorizontalScrollRange() với cuộn ngang

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