Construire dynamiquement un ConstraintLayout en KOTLIN
L'équivalent du code en JAVA:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main);
val constraintjd = ConstraintLayoutJD(this)
setContentView(constraintjd)
}
}
Puis la classe qui fabrique le ConstraintLayout:
class ConstraintLayoutJD(context: Context) : ConstraintLayout(context) {
fun fonctionActionSurConstraintSet(context: Context?, constraintSet: ConstraintSet) {
val bouton0 = Button(context)
bouton0.id = generateViewId()
bouton0.text = "0"
addView(bouton0)
val bouton1 = Button(context)
bouton1.id = generateViewId()
bouton1.text = "UN"
addView(bouton1)
val bouton2 = Button(context)
bouton2.id = generateViewId()
bouton2.text = "DEUX"
addView(bouton2)
val bouton3 = Button(context)
bouton3.id = generateViewId()
bouton3.text = "TROIS"
addView(bouton3)
val bouton4 = Button(context)
bouton4.id = generateViewId()
bouton4.text = "QUATRE"
addView(bouton4)
///// construction de 5 boutons /////
///// contraintes bouton0
constraintSet.constrainWidth(bouton0.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.constrainHeight(bouton0.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.connect(
bouton0.id, ConstraintSet.START,
ConstraintSet.PARENT_ID, ConstraintSet.START, 0
)
constraintSet.connect(
bouton0.id, ConstraintSet.END,
bouton1.id, ConstraintSet.START
)
constraintSet.connect(
bouton0.id, ConstraintSet.TOP,
ConstraintSet.PARENT_ID, ConstraintSet.TOP
)
constraintSet.connect(
bouton0.id, ConstraintSet.BOTTOM,
ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM
)
///// contraintes bouton1
constraintSet.constrainWidth(bouton1.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.constrainHeight(bouton1.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.connect(
bouton1.id, ConstraintSet.START,
ConstraintSet.PARENT_ID, ConstraintSet.START, 200
)
constraintSet.connect(
bouton1.id, ConstraintSet.END,
bouton2.id, ConstraintSet.START
)
constraintSet.connect(
bouton1.id, ConstraintSet.TOP,
ConstraintSet.PARENT_ID, ConstraintSet.TOP
)
constraintSet.connect(
bouton1.id, ConstraintSet.BOTTOM,
bouton3.id, ConstraintSet.TOP
)
///// contraintes bouton2
constraintSet.constrainWidth(bouton2.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.constrainHeight(bouton2.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.connect(
bouton2.id, ConstraintSet.START,
bouton1.id, ConstraintSet.END
)
constraintSet.connect(
bouton2.id, ConstraintSet.END,
ConstraintSet.PARENT_ID, ConstraintSet.END
)
constraintSet.connect(
bouton2.id, ConstraintSet.TOP,
bouton1.id, ConstraintSet.TOP
)
constraintSet.connect(
bouton2.id, ConstraintSet.BOTTOM,
bouton1.id, ConstraintSet.BOTTOM
)
///// contraintes bouton3
constraintSet.constrainWidth(bouton3.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.constrainHeight(bouton3.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.connect(
bouton3.id, ConstraintSet.START,
ConstraintSet.PARENT_ID, ConstraintSet.START, 200
)
constraintSet.connect(
bouton3.id, ConstraintSet.END,
bouton4.id, ConstraintSet.START
)
constraintSet.connect(
bouton3.id, ConstraintSet.TOP,
bouton1.id, ConstraintSet.BOTTOM
)
constraintSet.connect(
bouton3.id, ConstraintSet.BOTTOM,
ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM
)
///// contraintes bouton4
constraintSet.constrainWidth(bouton4.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.constrainHeight(bouton4.id, ConstraintSet.MATCH_CONSTRAINT)
constraintSet.connect(
bouton4.id, ConstraintSet.START,
bouton3.id, ConstraintSet.END
)
constraintSet.connect(
bouton4.id, ConstraintSet.END,
ConstraintSet.PARENT_ID, ConstraintSet.END
)
constraintSet.connect(
bouton4.id, ConstraintSet.TOP,
bouton3.id, ConstraintSet.TOP
)
constraintSet.connect(
bouton4.id, ConstraintSet.BOTTOM,
bouton3.id, ConstraintSet.BOTTOM
)
}
init {
id = generateViewId()
val layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
setLayoutParams(layoutParams)
setBackgroundColor(Color.argb(255, 0, 200, 5))
val constraintSet = ConstraintSet()
constraintSet.clone(this)
fonctionActionSurConstraintSet(context, constraintSet)
constraintSet.applyTo(this)
}
}