主要的问题是:lparams只是从Anko消失了,还是我做了什么非常错误的事情?以下代码片段无法编译:
verticalLayout {
}.lparams(width = matchParent, height = matchParent) {
topMargin = dip(10)
}虽然这样做没有任何问题:
verticalLayout {
layoutParams = LinearLayout.LayoutParams(matchParent, matchParent).apply {
topMargin = dip(10)
}
}我不太介意第二种选择,但你必须在生成参数时指定布局类型,这可能会有点麻烦(而且比原始解决方案更脆弱)。
在Anko GitHub页面、changelog或浏览最近提交的内容时,我没有找到任何内容。下面是完整的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
}相关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真的消失了,那么有没有比我已经在做的事情更优雅的替代品?
发布于 2015-12-19 14:49:10
显然,lparams仍然存在,但不能用作最外层布局的扩展函数:
因此,以下代码失败:
override fun createView(ui: AnkoContext<ReviewsFragment>) = ui.apply {
verticalLayout {
// Layout elements here
}.lparams {
// Layout params here
}
}.view但这段代码编译得很好:
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值得注意的是,不鼓励对内部布局使用非尾部版本的lparams:当嵌套布局的类型不同时,它将创建错误的LayoutParams子类。有关完整的讨论,请参阅此GitHub Issue。
发布于 2016-06-09 11:05:47
为什么不使用最新的方法来编写createView()方法呢?我认为下面的方法可以解决你的问题:
override fun createView(ui: AnkoContext<ReviewsFragment>) : View = with(ui) {
return verticalLayout {
// Layout elements here
}.lparams {
// Layout params here
}
}https://stackoverflow.com/questions/34351584
复制相似问题