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)

   }

}