toshiのエンジニア日記

できるエンジニアを目指して勉強した内容を日々まとめていきます。

GridLayoutに動的にImageViewを生成して割り当てる(Android Studio 3.0.1、Kotlin)

等間隔のグリッド上にViewを配置できるLayoutとして、GridLayoutがあります。

GridLayoutに対して静的に要素を割り当てる方法(xmlに直接記入する方法)はWeb上で多く紹介されていましたが、動的に生成して割り当てる方法がわかりづらかったのでまとめます。

動的割り当て方法

以下のようにして、動的にImageViewを生成して割り当てることができます(GridLayoutのIDはtestGridLayout)。

for(i in 0..(testGridLayout.rowCount - 1)) {
    for(j in 0..(testGridLayout.columnCount - 1)) {
        // ImageViewの生成
        val imgview = ImageView(this)
        // GridLayout用のパラメータを設定
        val params = GridLayout.LayoutParams()
        params.width = 256
        params.height = 256
        params.rowSpec = GridLayout.spec(i)
        params.columnSpec = GridLayout.spec(j)
        imgview.setLayoutParams(params)
        // ImageViewへ画像を設定
        imgview.setImageResource(R.drawable.smartphone_app)
        // GridLayoutへImageViewを割り当て
        testGridLayout.addView(imgview)
    }
}

ポイントは、paramsというパラメータを設定するための変数を生成して、ImageViewに与えている点です。

実行結果

4*5のGridLayoutに動的割り当てを行った結果を示します。

f:id:ntoshi1900:20180121221528p:plain

生成できています。