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

Android中不使用XML如何实现ScrollView滚动效果

纯代码实现ScrollView滚动效果方案

直接修改你的Activity代码即可,无需引入任何XML布局:

import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import android.widget.ScrollView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 实例化ScrollView作为根布局
        val scrollView = ScrollView(this)
        scrollView.layoutParams = ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
        )

        // 原有承载按钮的LinearLayout
        val linearLayout: LinearLayout = LinearLayout(this)
        linearLayout.orientation = LinearLayout.VERTICAL
        // 注意这里高度必须设置为WRAP_CONTENT,才能让布局随内容撑开触发滚动
        linearLayout.layoutParams = ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )

        // 原有添加按钮逻辑不变
        for (i in 0 until 35) {
            val button = Button(this)
            button.text = "Button ${i + 1}"
            linearLayout.addView(button)
        }

        // 将LinearLayout添加到ScrollView中(ScrollView仅允许存在1个直接子View)
        scrollView.addView(linearLayout)
        // 将ScrollView设置为Activity的内容视图
        setContentView(scrollView)
    }
}

关键注意事项

  • ScrollView 仅支持1个直接子元素:如果需要承载多个控件,必须先把所有控件放到同一个ViewGroup(比如LinearLayout、ConstraintLayout)中,再把这个ViewGroup作为唯一子元素添加到ScrollView
  • 布局参数配置要求:
    • ScrollView本身宽高设置为MATCH_PARENT,撑满整个屏幕可用区域
    • 内部承载内容的ViewGroup高度必须设置为WRAP_CONTENT,才能让内容高度超过ScrollView高度时触发滚动
  • 如需实现水平滚动,把ScrollView替换为HorizontalScrollView,同时将LinearLayout的方向改为LinearLayout.HORIZONTAL即可

内容的提问来源于stack exchange,提问作者Muhammedyar Nazarbaev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 19:45:04