我有一个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?
目前的情况如下:
我目前放置了2个横幅,顶部有大空白,小图像是带有recyclerview的横幅。下面的图片只是放在图像视图中的图像(它看起来应该是什么样的,但我希望它带有recyclerview,所以如果我有多个,我可以滚动横幅)
答案 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);
}
}