作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Anko DSL 编写 Android 布局。在定义 TextView
时,我想让它居中对齐,所以我这样写:
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 lambda 中的某些内容,或者它是 Kotlin 或 Anko 中的错误?
最佳答案
这实际上是范围界定中的错误。
corresponding issue已标记为已修复,因此修复可能会出现在下一个版本中。
关于android - Anko:应用的内部范围,令人困惑的属性解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977484/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!