kuluna.class
Qiita

MarginLayoutParamsの正しい使い方

Categories: Android

久々に技術ネタ。

Androidでレイアウト組む時は基本XMLなのでプログラムから作成することはほとんどないと思うのですが、プログラム側からmarginを指定するときにこの MarginLayoutParams を使用します。

MarginLayoutParams はLayoutParamsを継承しているのでそのまま他のViewのLayoutParamsにも渡せますが、古いAndroid(5系とか)ではこれが通用しません。

 val marginParams = MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT).apply {
    topMargin = 100
}
addView(view, marginParams)

ではどうやるかというと、addViewするViewGroupのLayoutParamsにMarginLayoutParamsを渡してあげるのです。
addViewする対象がFrameLayoutの場合はFrameLayout.LayoutParamsのコンストラクタに渡しましょう。

 val marginParams = MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT).apply {
    topMargin = 100
}
val params = FrameLayout.LayoutParams(marginParams)
addView(view, params)

追記(2018-03-31T13:58:06+41:00)

FrameLayoutParamsはMarginLayoutParamsを継承しているので、わざわざMarginLayoutParamsから作る必要はなかった。

val params = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT).apply {
    topMargin = 100
}