Как прослушать изменение высоты макета нижнего листа android - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующий код

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".ui.main.MainActivity">

    <fragment
        android:id="@+id/navHostFragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/main_graph" />

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="8dp">

        <include layout="@layout/bottom_sheet" />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

И

<?xml version="1.0" encoding="utf-8"?><!--suppress AndroidUnknownAttribute -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/bottomSheet"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bottom_sheet_corners"
    android:clickable="true"
    android:focusable="true"
    app:behavior_hideable="false"
    app:behavior_peekHeight="0dp"
    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
    tools:ignore="ContentDescription">

    <com.mobilemedia.tanuki.ui.view.RoundedView
        android:id="@+id/bottomSheetContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:topLeftCornerRadius="16dp"
        app:topRightCornerRadius="16dp">

        <fragment
            android:id="@+id/bottomSheetNavHostFragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/bottom_sheet_graph" />
    </com.mobilemedia.tanuki.ui.view.RoundedView>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/collapsedView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:layout_width="32dp"
            android:layout_height="4dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:background="@drawable/bottom_sheet_indicator"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Мне нужно прослушать изменение высоты макета нижнего листа, чтобы изменить положение элементов относительно этой высоты

enter image description here

Элемент всегда должен быть на высоте от нижнего листа, несмотря на то, что он находится на другом фрагменте в navHostFragment

Как слушать изменить высоту от нижнего листа?

1 Ответ

0 голосов
/ 25 июня 2020

В общем случае вы можете прослушать слайд нижнего листа, используя BottomSheetCallback . Переопределите метод onSlide и поместите в него свои действия. Этот метод вызывается при перетаскивании нижнего листа. И вы можете получить все свойства bottomSheet, включая высоту.

Но лучший способ - реализовать собственный CoordinatorLayout.Behavior. Это работает, только если ваши зависимые представления и BottomSheet являются дочерними элементами одного и того же макета координатора. Просто расширите CoordinatorLayout.Behavior и переопределите методы layoutDependsOn и onDependentViewChanged . CoordinatorLayout был создан для решения подобных проблем. Об этом много статей на inte rnet, например , например . В библиотеке android также есть стандартное поведение кнопки с плавающим действием.

Третий способ - использовать MotionLayout. Но это более сложный процесс, и начать с него бывает сложно. Так что я не должен предлагать его, потому что он может быть слишком мощным для этой задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...