目次

コードでViewを追加する

LinearLayoutの場合

   override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // setContentView(R.layout.activity_main) これはxmlからlayoutを取得するが、コードで作成したlyaoutからデザインwを作成する

        // layoutを作成する
        var layout=LinearLayout(this)
        layout.orientation=LinearLayout.VERTICAL
        layout.layoutParams =
            LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT)
        layout.gravity=Gravity.LEFT
        
        // コードで作成したlayoutを設定する
        setContentView(layout)

        // コードでimageViewを作成する
        var imagev = ImageView(this)
        imagev.setImageResource(R.drawable.man)
        val layoutParams = LinearLayout.LayoutParams(300,300)
        imagev.layoutParams=layoutParams
        
        // レイアウトにimageViewを追加する
        layout.addView(imagev)
        
        ・・・

ConstraintLayoutの場合

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main) デフォルトのsetContentViewは使わない

        // ConstraintLayoutを作る
        var layout=ConstraintLayout(this)
        layout.layoutParams = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT,ConstraintLayout.LayoutParams.MATCH_PARENT)
        // セットする
        setContentView(layout)

        // 追加したいViewを作る
        var imagev = ImageView(this)
        imagev.setImageResource(R.drawable.man)
        imagev.id = View.generateViewId() // idを設定する
        layout.addView(imagev) // ConstraintLayoutに追加したViewを追加する

        // constraintSet を使ってViewの位置を調整する
        var constraintSet = ConstraintSet()
        constraintSet.clone(layout)

        // android:layout_width="wrap_content"
        constraintSet.constrainWidth(imagev.id,ConstraintSet.WRAP_CONTENT)

        //android:layout_height="wrap_content"
        constraintSet.constrainHeight(imagev.id,ConstraintSet.WRAP_CONTENT)

        // app:layout_constraintBottom_toBottomOf="parent"
        constraintSet.connect(
            imagev.id,
            ConstraintSet.BOTTOM,
            ConstraintSet.PARENT_ID,
            ConstraintSet.BOTTOM,
            0)

        constraintSet.connect(
            imagev.id,
            ConstraintSet.TOP,
            ConstraintSet.PARENT_ID,
            ConstraintSet.TOP,
            0)

        constraintSet.connect(
            imagev.id,
            ConstraintSet.RIGHT,
            ConstraintSet.PARENT_ID,
            ConstraintSet.RIGHT,
            0
        )

        constraintSet.connect(
            imagev.id,
            ConstraintSet.LEFT,
            ConstraintSet.PARENT_ID,
            ConstraintSet.LEFT,
            0
        )

        constraintSet.constrainWidth(
            imagev.id,
            500
        )

        constraintSet.constrainHeight(
                imagev.id,
        500
        )

        // constraintSetを適用する
        constraintSet.applyTo(layout)