Anko:内在的适用范围,令人困惑的财产解决方案

hot*_*key 5 android kotlin anko

我正在使用Anko DSL编写Android布局.在定义a时TextView,我想让它居中对齐,所以我写了这个:

verticalLayout {
    textView(R.string.txt_greeting).apply {
        gravity = Gravity.CENTER_HORIZONTAL // <- this should have changed the alignment
        textSize = 20.0f
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是调整并没有改变.在调试器中我看到的重力被设置为LinearLayout这是TextView"父.

将语句更改为

textView(R.string.txt_greeting).let { it.gravity = Gravity.CENTER_HORIZONTAL }
Run Code Online (Sandbox Code Playgroud)

textView(R.string.txt_greeting).apply { this@apply.gravity = Gravity.CENTER_HORIZONTAL }
Run Code Online (Sandbox Code Playgroud)

乃至

textView(R.string.txt_greeting).apply { this.gravity = Gravity.CENTER_HORIZONTAL }
Run Code Online (Sandbox Code Playgroud)

解决了这个问题,因此在原始代码隐式this中肯定是解决了this@verticalLayout.

为什么会这样?

我是否误解了Kotlin lambdas中的某些内容,还是Kotlin或Anko中的错误?

hot*_*key 1

这实际上是范围界定的一个错误。

相应的问题已被标记为已修复,因此该修复很可能会出现在下一版本中。