具有一个recyclerView,当它垂直放置时,它可以很好地显示项目。但是当将其更改为水平方向时:
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
该项目显示不正确。一个示例是RelativeLayout中具有
的第三个视图(微调器)android:layout_alignParentEnd="true"
但是它显示为与父母的左边缘对齐,该边缘应该是右侧对齐的(并且在垂直方向上也是如此)。
水平recyclerView时,某些视图也存在问题,例如textView的宽度超出了父视图的宽度(
<TextView
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
,并且在限于其父视图内的垂直recyclerView中工作正常)
使用卧式recyclerView是否需要特殊考虑?
感兴趣的布局是:
<RelativeLayout
android:id="@id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@id/sponsored_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:singleLine="true"
android:textIsSelectable="false" />
<ImageView
android:id="@id/icon"
android:layout_width="6dp"
android:layout_height="6dp"
android:layout_alignBottom="@id/sponsored_text"
android:layout_toEndOf="@id/sponsored_text"
/>
<androidx.appcompat.widget.AppCompatSpinner
android:id="@id/spinner"
style="@style/Spinner"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_alignParentEnd="true"
android:dropDownWidth="216dp"
android:spinnerMode="dropdown" />
答案 0 :(得分:0)
事实证明,对于水平RecyclerView,水平recyclerView的测量行为有所不同,RelativeLayout中的match_parent
不起作用。 widthMeasureSpec
在
onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int)
在onMeasure中设置relativeLayout的宽度似乎可行,就像这样:
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.UNSPECIFIED) {
val windowWidth = context.resources.displayMetrics.widthPixels
containerView?.let {
val lp = it.layoutParams
lp.width = windowWidth
}
}
... ...
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}