Sto scrivendo un layout Android utilizzando Anko DSL. Quando si definisce un TextView
, ho voluto fare è allineato al centro, così ho scritto questo:Anko: ambito interno dell'applicazione, risoluzione proprietà confusa
verticalLayout {
textView(R.string.txt_greeting).apply {
gravity = Gravity.CENTER_HORIZONTAL // <- this should have changed the alignment
textSize = 20.0f
}
//...
}
Ma l'allineamento non è cambiato. Nel debugger ho visto che la gravità è impostata per il LinearLayout
che è il genitore di TextView
.
Cambiare la dichiarazione a uno
textView(R.string.txt_greeting).let { it.gravity = Gravity.CENTER_HORIZONTAL }
e
textView(R.string.txt_greeting).apply { [email protected] = Gravity.CENTER_HORIZONTAL }
e anche
textView(R.string.txt_greeting).apply { this.gravity = Gravity.CENTER_HORIZONTAL }
risolve il problema, quindi nel codice originale implicita this
è sicuramente deliberato di [email protected]
.
Perché succede?
Ho frainteso qualcosa nei lambda di Kotlin o è un insetto in Kotlin o Anko?
Sembra un bug. Ho presentato un problema qui: https://youtrack.jetbrains.com/issue/KT-10219 –