レイアウトをコードで書けるDSLのAnkoですが、ドキュメントを見てもFragmentのonCreateViewで返すViewをどう作ればいいのかよく分からず躓いたのでメモ。
これであってるのかな?もっといい方法があれば教えて下さい。
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// val view = inflater!!.inflate(R.layout.fragment_main, container, false)
val image = UI {
imageView {
id = View.generateViewId()
contentDescription = "test image"
image = if (Build.VERSION.SDK_INT < 21)
getResources().getDrawable(R.drawable.bike)
else
getResources().getDrawable(R.drawable.bike, null)
}
}.toView()
val view = UI {
relativeLayout {
padding = dip(16)
addView(image.layoutParams() { centerInParent() })
textView {
text = "test image"
}.layoutParams(width = wrapContent, height = wrapContent) {
below(spinImage.getId())
}
}
}.toView()
// imageに対する処理とか
return view
}
まだ、Ankoが便利なのかよくわかってない。
面倒ポイントとしては
- RelativeLayoutだとどうしてもViewのIDが必要になるので自分で生成しないといけない。
-
dip
みたいにAnko側でIDを生成してくれるUtilがあると助かるんだけど…View.generateViewId()
はAPI 17からだし…
-
- Viewの一部を外で使いたいとき若干手間