2015-11-28 19 views
5

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?

+4

Wygląda jak błąd. Złożyłem tutaj problem: https://youtrack.jetbrains.com/issue/KT-10219 –

Odpowiedz

1

To był właściwie błąd w określaniu zakresu.

Oznaczenie corresponding issue zostało oznaczone jako poprawione, więc poprawka prawdopodobnie pojawi się w następnym wydaniu.