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 
    } 
}