Github wikiページActivity
インスタンスで使用されるこの例を示します。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
verticalLayout {
padding = dip(30)
editText {
hint = "Name"
textSize = 24f
}
editText {
hint = "Password"
textSize = 24f
}
button("Login") {
textSize = 26f
}
}
}
Fragment
内で同じことを行う方法は?
そのverticalLayout
ブロックをonCreateView
に入れようとしましたが、メソッドを解決できません。私が追加しました anko-support-v4
依存関係ですが、それでも運がありません。
_anko-support-v4
_ソースコードといくつかの試行錯誤を掘り下げた後、それが正しい/推奨される方法かどうかはわかりませんが、回避策を見つけました。少し文書化されていないようです。
私のFragment
コードからのサンプル:
_override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return UI {
verticalLayout {
linearLayout {
avatar = imageView().lparams(width = dip(48), height = dip (48))
name = textView().lparams(width = 0, weight = 1f)
}
linearLayout {
// ...
}
}
}.toView()
}
_
UI { ... }.toView()
でFragment.onCreateView(...)
にラップされたレイアウトDSLを返します
Anko 0.8では、UIを別のクラスに保持して他の場所で再利用できるようにする場合は、AnkoComponent
を使用することもできます。
_class FragmentUi<T>: AnkoComponent<T> {
override fun createView(ui: AnkoContext<T>) = with(ui) {
verticalLayout {
// ...
}
}
}
_
フラグメントonCreateView()
でそれを呼び出すことができます
_override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View
= FragmentUi<Fragment>().createView(AnkoContext.create(ctx, this))
_
Anko 0.8.1の時点で、正しいコードは次のようになります。
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return UI {
verticalLayout {
linearLayout {
// ...
}
linearLayout {
// ...
}
}
}.view
}