安科:适用的内部范围,混淆财产的决议
我正在使用Anko DSL编写Android布局。 在定义一个TextView
,我想让它中心对齐,所以我这样写:
verticalLayout { textView(R.string.txt_greeting).apply { gravity = Gravity.CENTER_HORIZONTAL // <- this should have changed the alignment textSize = 20.0f } //... }
但是队列并没有改变。 在调试器中,我看到重力是为TextView
的父LinearLayout
设置的。
将语句更改为
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 lambda中的某些内容,或者是Kotlin还是Anko中的错误?
这实际上是一个范围的错误。
相应的问题已被标记为已修复,因此修补程序可能会出现在下一个版本中。