akh*_*khy 13 android android-layout android-fragments kotlin anko
在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
怎么做同样的内心Fragment?
我试图将该verticalLayout块放入onCreateView但该方法无法解决.我增加了anko-support-v4依赖性,但仍然没有运气.
Bru*_*let 20
使用Anko 0.8 AnkoComponent,如果要将UI保存在单独的类中,也可以使用an ,以便在其他地方重用它.
class FragmentUi<T>: AnkoComponent<T> {
override fun createView(ui: AnkoContext<T>) = with(ui) {
verticalLayout {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以把它在你的片段onCreateView()通过
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View
= FragmentUi<Fragment>().createView(AnkoContext.create(ctx, this))
Run Code Online (Sandbox Code Playgroud)
akh*_*khy 13
在挖掘了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()
}
Run Code Online (Sandbox Code Playgroud)
我回国布局DSL裹
UI { ... }.toView()在Fragment.onCreateView(...)
从anko 0.8.1开始,正确的代码是:
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return UI {
verticalLayout {
linearLayout {
// ...
}
linearLayout {
// ...
}
}
}.view
}
Run Code Online (Sandbox Code Playgroud)