我正在使用 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 中的错误?