kotlin android studio 動的にlayoutファイルを作成する
はじめに
レイアウトファイルに記述するのではなく、Activityにて動的にレイアウトファイルを記述する方法をこのページにまとめた。このほかあらゆるViewを動的に生成するには、検索方法にコツが必要になる。コツとしては、ImageView width set programaticalyのようにprogramaticalyとすれば知りたい情報が出てきやすい。
動的にレイアウトファイルを作成する
資料:https://www.javadrive.jp/android/linearlayout/index3.html
http://programming-beginner-memo.com/?p=854
https://qiita.com/shun-shun123/items/7fab7ad3c6b040803f52
イメージ
まず子Viewを追加したいLinearLayoutオブジェクトを取得する。
TextViewのオブジェクトを作成する。
LayoutParamsオブジェクトを作成する。
TextViewオブジェクトにLayoutParamsを設置する。
LinearLayoutオブジェクト.addView(TextViewオブジェクト)
これで追加することができる。
具体的なコード
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //子Viewを追加したいLinearLayoutオブジェクトを取得する。 val linearlayout = findViewById<LinearLayout>(R.id.linearlayout_id) //TextViewオブジェクトを作成する。 val textview_obj = TextView(this) textview_obj.text = "新しいオブジェクト" //LayoutParamsオブジェクトを作成する。 va textview_params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT) //TextViewオブジェクトにLayoutParamsを設置する。 textview_obj.layoutParams = textview_params //子Viewオブジェクトを追加する linearlayout.addView(textview_obj)
LinearLayoutオブジェクトにvertical, horaizonal属性を設置する方法
LinearLayoutはval ll_obj = LinearLayout(this)で生成する事ができる。問題はそのオブジェクトの属性値をどのように定めるか。
layout_height, layout_widthは以下の方法で設定できる。
- LinearLayout.LayoutParams.WRAP_CONTENT
- LinearLayout.LayoutParams.MATCH_PARENT
ll_objにandroid:orientationを設定するにはorientationアトリビュートを使う。
- ll_obj.orientation = LinearLayout.VERTICAL
- ll_obj.orientation = LinearLayout.HORIZONTAL
参考:https://www.androidly.net/114/android-viewgroups-linearlayout-relativelayout
Viewオブジェクトにwidth, heightを設定する方法
基本的な構造は以下の通りである。
Viewオブジェクト.layoutParams.widthまたはheight = INT //使用例 iv_test.layoutParams.width = 200
ちなみにこれを設定する時にエラーが出てしまった。これはaddViewで行った後じゃないと設定できなかった。
動的に生成したwidgetにidを付す場合
val radio_btn = RadioButton(this) radio_btn.setId(generateViewId())
android/view/View.html#generateviewid
ちなみに動的に作成したwidgetに付したidを取得するにはgetId()メソッドを使えばよい。
val radio_btn_id:Int = radio_btn.getId()