TextView两端对齐

方式一: 在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,这里就不贴代码了

点赞