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本身宽高设置为
- 如需实现水平滚动,把
ScrollView替换为HorizontalScrollView,同时将LinearLayout的方向改为LinearLayout.HORIZONTAL即可
内容的提问来源于stack exchange,提问作者Muhammedyar Nazarbaev
相关产品推荐
相关产品推荐

