5

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

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

但是对齐方式没有改变。在调试器中,我看到为 ' 的父级设置了LinearLayout重力TextView

将语句更改为

textView(R.string.txt_greeting).let { it.gravity = Gravity.CENTER_HORIZONTAL }

textView(R.string.txt_greeting).apply { this@apply.gravity = Gravity.CENTER_HORIZONTAL }

乃至

textView(R.string.txt_greeting).apply { this.gravity = Gravity.CENTER_HORIZONTAL }

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

为什么会这样?

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

4

1 回答 1

1

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

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

于 2016-01-15T13:42:40.357 回答