Android Установить состояние нижнего листа в XML

Нижний лист в XML имеет несколько состояний: STATE_COLLAPSED, STATE_EXPANDED, STATE_HIDDEN и т. д.

Как я могу установить набор в XML с помощью наблюдаемого?

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:id = "@+id/bottom_sheet_layout"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "vertical"
    app:behavior_hideable = "true"
    app:behavior_peekHeight = "0dp"
    app:layout_behavior = "@string/bottom_sheet_behavior"
    <!-- Example of State -->
    app:bottom_state = "@{viewModel.state}"
    >
</LinearLayout>

Очевидно, что нижнее состояние не соответствует названию, но я пытаюсь понять, что это такое.

1
0
2 015
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прямые значения xml недоступны для состояний нижнего листа. Но если вы хотите сделать это в привязке данных, есть еще один вариант. Создайте для этого адаптер привязки и используйте его.

@BindingAdapter("bottomSheetState")
fun bindingBottomSheet(container: LinearLayout, state:Int) {
    val behavior=BottomSheetBehavior.from(container)
    behavior.state = state
}

Теперь в xml вы можете использовать его

<LinearLayout
    android:layout_height = "340dp"
    android:layout_width = "match_parent"
    app:behavior_hideable = "true"
    app:behavior_peekHeight = "80dp"
    app:bottomSheetState = "@{model.uiState.bottomSheetState}"
    app:layout_behavior = "com.google.android.material.bottomsheet.BottomSheetBehavior">

Другие вопросы по теме