You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android竖直RecyclerView实现可展开文档树无法横向滚动问题求解

问题分析

当前无法触发横向滚动的核心原因有2个:

  1. HorizontalScrollView设置了fillViewport="true"属性,该属性会强制内部子控件(也就是你的RecyclerView)宽度占满HorizontalScrollView的可视宽度,就算列表内容实际宽度更宽也不会被撑开,自然没有横向滚动的空间。
  2. 你没有为不同层级的树节点设置左侧缩进,所有列表项都左对齐的情况下,item的最大宽度不会超过屏幕宽度,也无法触发横向滚动。

修复步骤

1. 修改activity布局

移除HorizontalScrollView的fillViewport="true"属性,修改后代码如下:

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".TreeActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</HorizontalScrollView>

2. 适配树节点的缩进逻辑

在适配器的bindView方法中,根据节点的嵌套层级设置列表项的左侧边距,不同层级的节点向右缩进,撑开RecyclerView的总宽度,修改参考代码如下:

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

        // 按节点层级设置左侧缩进,每一层缩进30dp,可根据需求调整数值
        val nodeLevel = p2.level // 需确保你的TreeNode类已维护level属性,根节点level为0,子节点level=父节点level+1
        val density = p0?.itemView?.resources?.displayMetrics?.density ?: 1f
        val paddingLeft = (nodeLevel * 30 * density).toInt()
        p0?.itemView?.setPadding(paddingLeft, 0, 0, 0)

        p0?.itemView?.layoutParams= RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
    }
}

3. 确认节点层级属性

检查你自定义的TreeNode类是否正确维护了每个节点的level属性:根节点层级为0,每向下嵌套一层层级加1即可。


修改完成后,展开多层节点时列表总宽度超过屏幕宽度就会自动触发横向滚动,同时RecyclerView保持原有竖直滚动逻辑,符合需求。

内容的提问来源于stack exchange,提问作者Abdullah Z Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:45:08