Android Studioでの動的なLayoutの幅と高さの変更方法
Androidアプリを開発していると結構躓きます。
今回は、後からレイアウトの幅と高さを変更する方法を紹介します。
言語はKotlinです。
まず、私が書いた失敗例がこれです。
#失敗例
findViewById<View>(R.id.testID).layoutParam.height = 100
findViewById<View>(R.id.testID).layoutParam.height = 100
固定で最初から数字を入れれば一応画面に反映されるんですが、2回目以降反映されません。
どうもheightに値を入れた後でViewを描写し直す必要があるようです。
なので、強制的に描写し直すことで反映させることができます。
#一応動く
findViewById<View>(R.id.testID).layoutParam.height = 100
findViewById<View>(R.id.testID).visibility = View.GONE
findViewById<View>(R.id.testID).visibility = View.VISIBLE
findViewById<View>(R.id.testID).layoutParam.height = 100
findViewById<View>(R.id.testID).visibility = View.GONE
findViewById<View>(R.id.testID).visibility = View.VISIBLE
visibilityは、そのレイアウトを表示するかどうかのパラメーターで、GONEは非表示、VISIBLEは表示を表しています。
なので、一度消してもう一度表示しています。
以前作ったアプリで失敗例の書き方を使って動いてしまったので、なぜなのか調べてみたらこのパターンでした。
実際は以下のような書き方をするのが一般的だと思います。
#ちゃんと動く
val lp = findViewById<View>(R.id.testID).layoutParams
lp.height = 100
findViewById<View>(R.id.testID).layoutParams = lp
val lp = findViewById<View>(R.id.testID).layoutParams
lp.height = 100
findViewById<View>(R.id.testID).layoutParams = lp
どうも、layoutParamを入れ直すと反映されるようです。
Viewのパラメーターによってはこんなことしなくてもちゃんと反映されるので、もし反映されないようだったら試してみてください。
以上!