主要问题是: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) : AnkoComponent { override fun createView(ui: AnkoContext ) = ui.apply { verticalLayout { layoutParams = LinearLayout.LayoutParams(matchParent, matchParent).apply { topMargin = dip(10) } } }.view }
相关的Gradle条目(我使用的是Kotlin 1.0.0-beta-3595):
ext.versions = [ anko : '0.8.1', ] compile "org.jetbrains.anko:anko-common:$versions.anko", compile "org.jetbrains.anko:anko-sdk21:$versions.anko", compile "org.jetbrains.anko:anko-support-v4:$versions.anko", compile "org.jetbrains.anko:anko-design:$versions.anko", compile "org.jetbrains.anko:anko-appcompat-v7:$versions.anko", compile "org.jetbrains.anko:anko-cardview-v7:$versions.anko", compile "org.jetbrains.anko:anko-recyclerview-v7:$versions.anko", compile "org.jetbrains.anko:anko-gridlayout-v7:$versions.anko",
作为一个后续问题:如果lparams
确实已经消失了,那么还有比我现在做的更优雅的替代品吗?
显然lparams
仍然存在,但不能用作最外层布局的扩展功能:
因此以下代码失败:
override fun createView(ui: AnkoContext) = ui.apply { verticalLayout { // Layout elements here }.lparams { // Layout params here } }.view
但这编译很好:
override fun createView(ui: AnkoContext) = ui.apply { verticalLayout { lparams { // Layout params here } // Layout elements here verticalLayout { }.lparams { // lparams works fine if there is a parent layout } } }.view
值得注意的是,不lparams
鼓励使用非拖尾版本的内部布局:LayoutParams
当嵌套布局具有不同类型时,它将创建错误的子类.有关完整的讨论,请参阅此GitHub问题.