Как установить значение layout_weight переключателя в Anko DSL (Android)?

Я использую Anko DSL для создания пользовательского интерфейса вместо XML. Но когда я собираюсь установить параметр layout_weight переключателя в Anko, я получаю сообщение об ошибке.

Я пробовал следующим образом:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    verticalLayout() {
        radioGroup() {
            orientation = LinearLayout.HORIZONTAL
            radioButton {
                id = RADIO_SECOND
                text = "second(s)"

            }.lparams(width = wrapContent, height = wrapContent, weight = 0.25F)

            // Few more radio button
        }
    }
}

Но выдает ошибку Error:(107, 19) 'inline fun <T : View> RadioButton.lparams(width: Int = ..., height: Int = ..., weight: Float): RadioButton' can't be called in this context by implicit receiver. Use the explicit one if necessary.

Как я могу продолжить?


person Al Mamun    schedule 15.03.2018    source источник
comment
В каком контексте вы это используете? Итак, какой код окружает ваш фрагмент?   -  person creativecreatorormaybenot    schedule 15.03.2018
comment
@creativecreatorormaybenot Я обновил сообщение с окружающими кодами.   -  person Al Mamun    schedule 15.03.2018


Ответы (1)


Указав параметр weight для radioButton, вы выбираете использование lparams, определенная в классе _LinearLayout Anko, поэтому вы, по сути, пытаетесь придать radioButton вес в контексте verticalLayout, который упаковывает весь макет.

Чтобы придать ему вес в контексте radioGroup, вы можете использовать другой lparams, аналогичный параметр которой называется initWeight:

verticalLayout {
    radioGroup {
        orientation = LinearLayout.HORIZONTAL
        radioButton {
            id = RADIO_SECOND
            text = "second(s)"
        }.lparams(width = wrapContent, height = wrapContent, initWeight = 0.25F)
    }
}

Это поместит вызов в правильный контекст.

person zsmb13    schedule 15.03.2018