[英]How To Make Layout (Not Activity Layout, Fragment) using Anko(DSL)?
[英]How to use Anko DSL inside a Fragment?
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
依赖关系,但仍然没有运气。
如果要将UI放在单独的类中,以便可以在其他地方重用,则还可以使用AnkoComponent
0.8使用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-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()
}
我要返回包装在
Fragment.onCreateView(...)
中的UI { ... }.toView()
中的布局DSLFragment.onCreateView(...)
从anko 0.8.1开始,正确的代码应为:
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return UI {
verticalLayout {
linearLayout {
// ...
}
linearLayout {
// ...
}
}
}.view
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.