Kotlin Anko 0.8-未解析的LPARAM参考
主要问题是:Kotlin Anko 0.8-未解析的LPARAM参考,kotlin,anko,Kotlin,Anko,主要问题是:lparams是从Anko消失了,还是我做错了什么?以下代码段无法编译: verticalLayout { }.lparams(width = matchParent, height = matchParent) { topMargin = dip(10) } 虽然这样做没有任何问题: verticalLayout { layoutParams = LinearLayout.LayoutParams(matchParent, matchParent).apply {
lparams
是从Anko消失了,还是我做错了什么?以下代码段无法编译:
verticalLayout {
}.lparams(width = matchParent, height = matchParent) {
topMargin = dip(10)
}
虽然这样做没有任何问题:
verticalLayout {
layoutParams = LinearLayout.LayoutParams(matchParent, matchParent).apply {
topMargin = dip(10)
}
}
我不太介意第二个选项,但在生成参数时必须指定布局类型,这可能会有点烦人(而且比原始解决方案更脆弱)
我在Anko
GitHub页面、变更日志或浏览最近提交的内容时都没有找到任何内容。以下是供参考的完整UI类:
class ReviewsFragmentUi(ctx: AnkoContext<ReviewsFragment>) : AnkoComponent<ReviewsFragment> {
override fun createView(ui: AnkoContext<ReviewsFragment>) = ui.apply {
verticalLayout {
layoutParams = LinearLayout.LayoutParams(matchParent, matchParent).apply {
topMargin = dip(10)
}
}
}.view
}
作为后续问题:如果
lparams
确实消失了,那么是否有比我现在所做的更优雅的替代品?显然lparams
仍然存在,但不能用作最外层布局的扩展功能:
因此,以下代码失败:
override fun createView(ui: AnkoContext<ReviewsFragment>) = ui.apply {
verticalLayout {
// Layout elements here
}.lparams {
// Layout params here
}
}.view
覆盖视图(ui:AnkoContext)=ui.apply{
垂直布局{
//此处的布局元素
}.lparams{
//布局参数在这里
}
}.视图
但这很好:
override fun createView(ui: AnkoContext<ReviewsFragment>) = ui.apply {
verticalLayout {
lparams {
// Layout params here
}
// Layout elements here
verticalLayout { }.lparams {
// lparams works fine if there is a parent layout
}
}
}.view
覆盖视图(ui:AnkoContext)=ui.apply{
垂直布局{
LPARAM{
//布局参数在这里
}
//此处的布局元素
垂直布局{}.lparams{
//如果有父布局,LPARAM工作正常
}
}
}.视图
值得注意的是,对于内部布局,不建议使用非尾随版本的
lparams
:当嵌套布局的类型不同时,它将创建错误的LayoutParams
子类。有关完整的讨论,请参见此。为什么不使用最新的方法编写createView()
方法?
我认为以下方法可以解决您的问题:
override fun createView(ui: AnkoContext<ReviewsFragment>) : View = with(ui) {
return verticalLayout {
// Layout elements here
}.lparams {
// Layout params here
}
}
createView(ui:AnkoContext):View=with(ui){
返回垂直布局{
//此处的布局元素
}.lparams{
//布局参数在这里
}
}
override fun createView(ui: AnkoContext<ReviewsFragment>) : View = with(ui) {
return verticalLayout {
// Layout elements here
}.lparams {
// Layout params here
}
}