2015-11-28 11 views
5

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?

+4

Sembra un bug. Ho presentato un problema qui: https://youtrack.jetbrains.com/issue/KT-10219 –

risposta

1

In realtà era un bug in ambito.

Il corresponding issue è stato contrassegnato come fisso, quindi è probabile che la correzione venga visualizzata nella prossima versione.