Представления два и три могут быть объединены в их собственную группу представлений, и группа представлений будет участвовать в цепочке. Это будет работать, но промежуток между этими двумя видами будет постоянным и может выглядеть странно на маленьком экране, если этот интервал выглядит больше, чем другой интервал.
Другой подход состоит в удалении третьего элемента из цепочки, как вы уже упоминали, но искать совпадение между третьим и четвертым элементами. Когда есть перекрытие, цепь может быть модифицирована, чтобы включить все элементы в расположении упакованной цепи. Код для этого будет выглядеть примерно так:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val constraintLayout = findViewById<ConstraintLayout>(R.id.mainLayout)
constraintLayout.doOnLayout {
val tv3 = findViewById<View>(R.id.textView3)
val tv4 = findViewById<View>(R.id.textView4)
if (tv4.top < tv3.bottom) {
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout)
constraintSet.createVerticalChain(
ConstraintSet.PARENT_ID,
ConstraintSet.TOP,
ConstraintSet.PARENT_ID,
ConstraintSet.BOTTOM,
intArrayOf(
R.id.textView1,
R.id.textView2,
R.id.textView3,
R.id.textView4,
R.id.textView5
),
null,
ConstraintSet.CHAIN_SPREAD
)
constraintSet.applyTo(constraintLayout)
}
}
}
}