亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嵌套的Recycler視圖高度不會包裝其內容

嵌套的Recycler視圖高度不會包裝其內容

MMTTMM 2019-07-23 16:47:20
嵌套的Recycler視圖高度不會包裝其內容我有一個應用程序來管理書籍集(如播放列表)。我想顯示一個帶有垂直RecyclerView的集合列表,并在每行內部顯示一個水平RecyclerView中的書籍列表。當我將內部水平RecyclerView的layout_height設置為300dp時,它會正確顯示,但是當我將其設置為wrap_content時,它不會顯示任何內容。 我需要使用wrap_content,因為我希望能夠以編程方式更改布局管理器以在垂直和水平顯示之間切換。你知道我做錯了什么嗎?我的片段布局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:background="@color/white">     <com.twibit.ui.view.CustomSwipeToRefreshLayout         android:id="@+id/swipe_container"         android:layout_width="match_parent"         android:layout_height="match_parent">         <LinearLayout             android:layout_width="match_parent"             android:layout_height="match_parent"             android:orientation="vertical">             <android.support.v7.widget.RecyclerView                 android:id="@+id/shelf_collection_listview"                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:paddingTop="10dp"/>         </LinearLayout>     </com.twibit.ui.view.CustomSwipeToRefreshLayout></LinearLayout>集合元素布局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:layout_width="match_parent"               android:layout_height="wrap_content"               android:orientation="vertical">     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:background="#FFF">         <!-- Simple Header -->     </RelativeLayout>     <FrameLayout         android:layout_width="match_parent"         android:layout_height="wrap_content">
查看完整描述

3 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

方向和動態數據更改的完整解決方法是:

public class MyLinearLayoutManager extends LinearLayoutManager {
    public MyLinearLayoutManager(Context context, int orientation, boolean reverseLayout)    {
        super(context, orientation, reverseLayout);
    }
    private int[] mMeasuredDimension = new int[2];
    @Override
    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state,
                          int widthSpec, int heightSpec) {
        final int widthMode = View.MeasureSpec.getMode(widthSpec);
        final int heightMode = View.MeasureSpec.getMode(heightSpec);
        final int widthSize = View.MeasureSpec.getSize(widthSpec);
        final int heightSize = View.MeasureSpec.getSize(heightSpec);
        int width = 0;
        int height = 0;
        for (int i = 0; i < getItemCount(); i++) {
            measureScrapChild(recycler, i,
                    View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),
                    View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),
                    mMeasuredDimension);
            if (getOrientation() == HORIZONTAL) {
                width = width + mMeasuredDimension[0];
                if (i == 0) {
                    height = mMeasuredDimension[1];
                }
            } else {
                height = height + mMeasuredDimension[1];
                if (i == 0) {
                    width = mMeasuredDimension[0];
                }
            }
        }
        switch (widthMode) {
            case View.MeasureSpec.EXACTLY:
                width = widthSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }
        switch (heightMode) {
            case View.MeasureSpec.EXACTLY:
                height = heightSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }
        setMeasuredDimension(width, height);
    }
    private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,
                                   int heightSpec, int[] measuredDimension) {
        View view = recycler.getViewForPosition(position);
        if (view != null) {
            RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();
            int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec,
                    getPaddingLeft() + getPaddingRight(), p.width);
            int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec,
                    getPaddingTop() + getPaddingBottom(), p.height);
            view.measure(childWidthSpec, childHeightSpec);
            measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin;
            measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin;
            recycler.recycleView(view);
        }
    }}


查看完整回答
反對 回復 2019-07-23
  • 3 回答
  • 0 關注
  • 630 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號