Android Studioでの動的なLayoutの幅と高さの変更方法

 Androidアプリを開発していると結構躓きます。

今回は、後からレイアウトの幅と高さを変更する方法を紹介します。

言語はKotlinです。

まず、私が書いた失敗例がこれです。


#失敗例
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

visibilityは、そのレイアウトを表示するかどうかのパラメーターで、GONEは非表示、VISIBLEは表示を表しています。

なので、一度消してもう一度表示しています。

以前作ったアプリで失敗例の書き方を使って動いてしまったので、なぜなのか調べてみたらこのパターンでした。

実際は以下のような書き方をするのが一般的だと思います。


#ちゃんと動く
val lp = findViewById<View>(R.id.testID).layoutParams
lp.height = 100
findViewById<View>(R.id.testID).layoutParams = lp

どうも、layoutParamを入れ直すと反映されるようです。

Viewのパラメーターによってはこんなことしなくてもちゃんと反映されるので、もし反映されないようだったら試してみてください。

以上!

このブログの人気の投稿

動画編集ソフト「Shotcut」で縦向きの動画を横向きにする方法。

Audacityで音声部分のみを自動カットする方法