思路为在竖向
LinearLayout
上添加多个横向LinearLayout
,从而实现动态排列。控件以按钮为例
- 竖向
LinearLayout
<ScrollView
android:id="@+id/s"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent">
<LinearLayout
android:id="@+id/l"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</ScrollView>
- 横向
LinearLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ltbtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:orientation="horizontal"
android:padding="5dp" />
- 欲添加控件
tbutton
<?xml version="1.0" encoding="utf-8"?>
<ToggleButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
OnCreate
override fun onCreate(savedInstanceState: Bundle?) {
var tbtncnt = 0
lateinit var ltbtn:View
var tbtnlist: List<ToggleButton> = arrayListOf()
cdwn.setOnClickListener{ //cdwn为点击按钮
if(tbtncnt % 4 == 0) {
ltbtn = layoutInflater.inflate(R.layout.ltbtn, l, false)
ltbtn.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1F)
l.addView(ltbtn)
}
val tbv = layoutInflater.inflate(R.layout.tbutton, ltbtn.ltbtn, false)
tbtnlist += tbv.tbtn
tbtncnt++
ltbtn.ltbtn.addView(tbv)
}
}