5

Anko DSL を使用して Android レイアウトを作成しています。を定義するとき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 { this@apply.gravity = Gravity.CENTER_HORIZONTAL }

そしてさえ

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

は問題を解決するため、元のコードでは暗黙的thisは確実に に解決されthis@verticalLayoutます。

なぜこれが起こるのですか?

Kotlin ラムダの何かを誤解していますか、それとも Kotlin または Anko のバグですか?

4

1 に答える 1