方式一: 在ConstranLayout中实现
主要实现代码,dip2px方法自行百度,textView_top为顶部组件id
val text = getString(R.string.text)
val textLen = text.length
val set = ConstraintSet()
set.clone(constrainLayout)
for (i in 0 until textLen) {
val id = TextViewConstans.ids[i]
val textView = TextView(this)
textView.text = text[i].toString()
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15f)
textView.id = id
constrainLayout.addView(textView)
//这两行不可缺少,不然textview不会显示
set.constrainHeight(TextViewConstans.ids[i], ConstraintLayout.LayoutParams.WRAP_CONTENT)
set.constrainWidth(TextViewConstans.ids[i], ConstraintLayout.LayoutParams.WRAP_CONTENT)
when (i) {
0 -> {
set.connect(id, ConstraintSet.START, R.id.textView_top, ConstraintSet.START)
//首字贴紧左边时注释
//set.connect(id, ConstraintSet.END, TextViewConstans.ids[i + 1], ConstraintSet.START)
set.connect(id, ConstraintSet.TOP, R.id.textView_top, ConstraintSet.BOTTOM, CommonUtil.dip2px(this, 10f))
}
agentStrLen - 1 -> {
//尾字贴紧右边时注释
//set.connect(id, ConstraintSet.START, TextViewConstans.ids[i - 1], ConstraintSet.END)
set.connect(id, ConstraintSet.END, R.id.textView_top, ConstraintSet.END)
set.connect(id, ConstraintSet.TOP, TextViewConstans.ids[0], ConstraintSet.TOP)
set.connect(id, ConstraintSet.BOTTOM, TextViewConstans.ids[0], ConstraintSet.BOTTOM)
}
else -> {
set.connect(id, ConstraintSet.START, TextViewConstans.ids[i - 1], ConstraintSet.END)
set.connect(id, ConstraintSet.END, TextViewConstans.ids[i + 1], ConstraintSet.START)
set.connect(id, ConstraintSet.TOP, TextViewConstans.ids[0], ConstraintSet.TOP)
set.connect(id, ConstraintSet.BOTTOM, TextViewConstans.ids[0], ConstraintSet.BOTTOM)
}
}
}
set.applyTo(constrainLayout)
id集合,根据需要加减
object TextViewConstans {
val ids = mutableListOf(
R.id.textView_0,
R.id.textView_1,
R.id.textView_2,
R.id.textView_3,
R.id.textView_4,
R.id.textView_5,
R.id.textView_6,
R.id.textView_7,
R.id.textView_8,
R.id.textView_9,
R.id.textView_10,
R.id.textView_11,
R.id.textView_12,
R.id.textView_13,
R.id.textView_14,
R.id.textView_15,
R.id.textView_16,
R.id.textView_17,
R.id.textView_18,
R.id.textView_19
)
}
定义ids.xml
***这里注意不要写成***
<item name="textView_0" type="id">textView_0</item>
会报 error: <item> inner element must either be a resource reference or empty.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="textView_0" type="id"/>
<item name="textView_1" type="id"/>
<item name="textView_2" type="id"/>
<item name="textView_3" type="id"/>
<item name="textView_4" type="id"/>
<item name="textView_5" type="id"/>
<item name="textView_6" type="id"/>
<item name="textView_7" type="id"/>
<item name="textView_8" type="id"/>
<item name="textView_9" type="id"/>
<item name="textView_10" type="id"/>
<item name="textView_11" type="id"/>
<item name="textView_12" type="id"/>
<item name="textView_13" type="id"/>
<item name="textView_14" type="id"/>
<item name="textView_15" type="id"/>
<item name="textView_16" type="id"/>
<item name="textView_17" type="id"/>
<item name="textView_18" type="id"/>
<item name="textView_19" type="id"/>
</resources>
方式二: 在LinearLayout中实现,使用横向排列,设置weight,这里就不贴代码了