带有水平溢出的Android垂直recyclerview
Posted
技术标签:
【中文标题】带有水平溢出的Android垂直recyclerview【英文标题】:Android vertical recyclerview with horizontal overflow 【发布时间】:2021-12-30 20:46:37 【问题描述】:我正在尝试使用 RecyclerView 实现文档树。因为树是可扩展的,所以我使用了一个自定义适配器。 RecyclerView 中的所有布局项都设置为 WRAP_CONTENT 宽度,以及 RecyclerView 本身。因为项目中的标签可以很长并且可以嵌套,所以我希望列表可以水平滚动以查看剪辑的项目,并且列表方向是垂直的。如果您需要其他任何内容,请发表评论。
branch.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:orientation="vertical"
android:gravity="center"
android:layout_
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:padding="10dp"
android:id="@+id/title"
android:gravity="center"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent"
android:layout_
android:layout_ />
<ImageView
android:id="@+id/arrow"
android:layout_
android:layout_
android:src="@drawable/ic_baseline_keyboard_arrow_down_24"/>
</LinearLayout>
活动
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:fillViewport="true"
tools:context=".TreeActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_
android:layout_ />
</HorizontalScrollView>
绑定视图(适配器单独管理)
class BranchViewHolder(val branchBinding: BranchBinding) : TreeViewBinder.ViewHolder(branchBinding.root)
override fun getLayoutId(): Int = R.layout.branch
override fun provideViewHolder(itemView: View?): BranchViewHolder = BranchViewHolder(BranchBinding.bind(itemView!!))
override fun bindView(p0: BranchViewHolder?, p1: Int, p2: TreeNode<*>?)
Log.i(TAG, "bindView: $p2?.isExpand")
val rotateDegree = if (p2?.isExpand == true) -90 else 0
p0?.branchBinding?.arrow?.rotation = rotateDegree.toFloat()
with(p2?.content as Branch)
p0?.branchBinding?.title?.text = this.name
p0?.itemView?.layoutParams= RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
截图
问题 - 想要水平滚动
【问题讨论】:
【参考方案1】:将app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
添加到您的RecyclerView
。
例如,如果你想水平滚动项目,试试这个:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_
android:layout_
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
不要忘记为垂直/水平滚动添加orientation
。
【讨论】:
这将强制内容水平,我不希望那样。看图片,内容是垂直添加的。但我需要它们可以双向滚动。【参考方案2】:最重要的是将android:maxLines="1"
添加到您的TextView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:orientation="vertical"
android:gravity="center"
android:layout_
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:padding="10dp"
android:id="@+id/title"
android:gravity="center"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent"
android:maxLines="1"
android:layout_
android:layout_ />
<ImageView
android:id="@+id/arrow"
android:layout_
android:layout_
android:src="@drawable/ic_baseline_keyboard_arrow_down_24"/>
</LinearLayout>
如下更新您的回收站视图
<HorizontalScrollView
android:layout_
android:layout_>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item"
android:layout_
android:layout_ />
</HorizontalScrollView>
【讨论】:
我不希望所有项目都有单独的卷轴。我想滚动整个 RecyclerView。 @AbdullahZKhan,上面编辑的代码,它必须工作。 现在它只是被剪掉了。为什么将匹配父级放在线性布局宽度上? 让所有 recyclerview 孩子都使用一种尺寸。他们都将和最长的孩子一样长。 可以看看你的源代码吗?以上是关于带有水平溢出的Android垂直recyclerview的主要内容,如果未能解决你的问题,请参考以下文章