Piszę układ Android za pomocą Anko DSL. Podczas definiowania TextView
, chciałem, aby to centrum wyrównane, więc napisałem tak:Anko: wewnętrzny zakres zastosowania, myląca właściwość rozdzielczości
verticalLayout {
textView(R.string.txt_greeting).apply {
gravity = Gravity.CENTER_HORIZONTAL // <- this should have changed the alignment
textSize = 20.0f
}
//...
}
Ale wyrównanie nie uległ zmianie. W debugerze zobaczyłem, że grawitacja jest ustawiona dla LinearLayout
, która jest rodzicem TextView
.
Zmiana oświadczenia albo
textView(R.string.txt_greeting).let { it.gravity = Gravity.CENTER_HORIZONTAL }
i
textView(R.string.txt_greeting).apply { [email protected] = Gravity.CENTER_HORIZONTAL }
a nawet
textView(R.string.txt_greeting).apply { this.gravity = Gravity.CENTER_HORIZONTAL }
rozwiązuje problemu, a więc w oryginalnym kodzie niejawna this
jest zdecydowanie postanowił [email protected]
.
Dlaczego tak się dzieje?
Czy źle rozumiem coś w lambdach Kotlin, czy jest to błąd w Kotlin lub Anko?
Wygląda jak błąd. Złożyłem tutaj problem: https://youtrack.jetbrains.com/issue/KT-10219 –