首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Anko 0.8 -未解析的lparams引用

Anko 0.8 -未解析的lparams引用
EN

Stack Overflow用户
提问于 2015-12-18 16:43:54
回答 2查看 1.2K关注 0票数 6

主要的问题是:lparams只是从Anko消失了,还是我做了什么非常错误的事情?以下代码片段无法编译:

代码语言:javascript
复制
verticalLayout {
}.lparams(width = matchParent, height = matchParent) {
    topMargin = dip(10)
}

虽然这样做没有任何问题:

代码语言:javascript
复制
verticalLayout {
    layoutParams = LinearLayout.LayoutParams(matchParent, matchParent).apply {
        topMargin = dip(10)
    }
}

我不太介意第二种选择,但你必须在生成参数时指定布局类型,这可能会有点麻烦(而且比原始解决方案更脆弱)。

Anko GitHub页面、changelog或浏览最近提交的内容时,我没有找到任何内容。下面是完整的UI类以供参考:

代码语言:javascript
复制
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):

代码语言:javascript
复制
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真的消失了,那么有没有比我已经在做的事情更优雅的替代品?

EN

回答 2

Stack Overflow用户

发布于 2015-12-19 14:49:10

显然,lparams仍然存在,但不能用作最外层布局的扩展函数:

因此,以下代码失败:

代码语言:javascript
复制
override fun createView(ui: AnkoContext<ReviewsFragment>) = ui.apply {
    verticalLayout {
        // Layout elements here
    }.lparams { 
        // Layout params here
    }
}.view

但这段代码编译得很好:

代码语言:javascript
复制
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

票数 8
EN

Stack Overflow用户

发布于 2016-06-09 11:05:47

为什么不使用最新的方法来编写createView()方法呢?我认为下面的方法可以解决你的问题:

代码语言:javascript
复制
override fun createView(ui: AnkoContext<ReviewsFragment>) : View = with(ui) { 
    return verticalLayout { 
    // Layout elements here 
    }.lparams { 
    // Layout params here 
    } 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34351584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档