安科:适用的内部范围,混淆财产的决议
我正在使用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中的错误?
这实际上是一个范围的错误。
相应的问题已被标记为已修复,因此修补程序可能会出现在下一个版本中。
- 如何跳过基础包中的retrofit2使用的proguard模型?
- Android数据绑定与Kotlin,BaseObservable和一个自定义委托
- Robolectric KeyStoreKeyGenerator
- 在android studio 3.0 canary 4 ui预览中丢失的类
- 内联setter或不在Kotlin中创建未使用的setter?
- NotificationManager.setInterruptionFilter不适用于某些电话
- 当我点击EditText时如何禁用键盘?
- Kotlinx不能解决符号“合成”
- 为什么使用DrawerLayout给IllegalArgumentException:DrawerLayout必须用MeasureSpec.EXACTLY