Anko: внутренняя область применения, разрешение запутанных свойств

Пишу макет Android с помощью Anko DSL. При определении 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 { [email protected] = Gravity.CENTER_HORIZONTAL }

и даже

textView(R.string.txt_greeting).apply { this.gravity = Gravity.CENTER_HORIZONTAL }

решает проблему, поэтому в исходном коде неявный this определенно разрешен до this@verticalLayout.

Почему это происходит?

Я что-то неправильно понимаю в лямбдах Kotlin или это ошибка в Kotlin или Anko?


person hotkey    schedule 28.11.2015    source источник
comment
Похоже на ошибку. Я написал здесь о проблеме: youtrack.jetbrains.com/issue/KT-10219   -  person Kirill Rakhman    schedule 29.11.2015


Ответы (1)


На самом деле это была ошибка в области видимости.

соответствующая проблема отмечена как исправленная, поэтому исправление, вероятно, появятся в следующем выпуске.

person hotkey    schedule 15.01.2016