Les vues deux et trois pourraient être regroupées dans leur propre groupe de vues et le groupe de vues participerait à la chaîne. Cela fonctionnera, mais l'écart entre ces deux vues sera constant et pourra paraître étrange sur un petit écran si cet écart semble plus grand que l'autre.
Une autre approche consiste à supprimer le troisième élément de la chaîne, comme vous l'avez mentionné, mais à rechercher un chevauchement entre les troisième et quatrième éléments. Lorsqu'il y a un chevauchement, la chaîne peut être modifiée pour inclure tous les éléments dans un arrangement de chaîne emballée. Le code pour faire cela ressemblerait à quelque chose comme ceci :
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)
}
}
}
}