在recycleview上的wrap_content,取项目的高度(水平列表)

时间:2015-01-31 22:23:10

标签: android android-layout android-recyclerview

我有一个RecycleView,设置为水平。现在我希望高度与视图中项目的高度相匹配。我事先并不知道这个高度。

目前我有这个:

主要片段:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="horizontal"
        android:layout_marginLeft="1dp"
        android:layout_marginRight="1dp"
        android:layout_marginTop="1dp"
        android:layout_gravity="top"
        android:id="@+id/my_listview"/>

</RelativeLayout>


<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

图片

<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/banner_image"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    android:background="@color/dark_gray"
    />

但它总是占用整个屏幕。所以我之间有很多空白。有没有办法可以在recycleview项目上使用wrap_content?

目前的情况如下: enter image description here

我目前放置了2个横幅,顶部有大空白,小图像是带有recyclerview的横幅。下面的图片只是放在图像视图中的图像(它看起来应该是什么样的,但我希望它带有recyclerview,所以如果我有多个,我可以滚动横幅)

4 个答案:

答案 0 :(得分:1)

  

现在我希望高度与中的项目高度相匹配   视图。我事先并不知道这个高度。

在布局过程中,LinearLayoutManager无法提前确定适配器中尚未创建的所有视图的高度。

您可以从适配器measure()项目视图(可能是第一个),然后通过代码设置RecycleView的高度。

如果所有项目都有不同的高度,那么你必须全部测量它们,这肯定不是正确用户界面的正确方法。

答案 1 :(得分:0)

您可能错误地夸大了布局。

你用过吗?

layoutInflater.inflate(R.layout.your_layout, null);

请尝试使用。 (另一种方式是测量混乱)

layoutInflater.inflate(R.layout.your_layout, parent, false);

答案 2 :(得分:0)

是否有理由将RecycleView包裹在RelativeLayout内? 我会先尝试将RecycleView移出RelativeLayout

其次,我发现您的ViewPager有一个layout_weight,但我在父布局中看不到android:weightSum属性。您是否有理由指定ViewPager拥有weight而不是RecycleView?您是否尝试将RecyleView的大小修改为某个dp以检查排列是否正确以及ViewPager是否正确使用weight属性?

第三,我会尝试使用Imageview。尝试将其包裹在RelativeLayout内?你将不得不玩那里的参数,看看它是否适合你。因为你想要一些自定义的东西,所以对这个问题没有直接答案。

答案 3 :(得分:0)

我也遇到了同样的问题,我想在RecyclerView中查看两个具有相同大小的列中的两个图像,我可以使用下面的代码解决问题。请试试这个。

// inner class to hold a reference to each item of RecyclerView 
    public static class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView imgViewIcon;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
            imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
            int colSpan = 2;
            imgViewIcon.getLayoutParams().height = (int) (displayMetrics.widthPixels / colSpan);
            imgViewIcon.getLayoutParams().width = (int) (displayMetrics.widthPixels / colSpan);

        }
    }