Метод setHalfExpandedRatio (коэффициент с плавающей запятой)

Это мой первый вопрос в этом невероятном сообществе.

Я разрабатываю приложение для Android в kotlin. Мне нужен постоянный нижний лист (не модальный). Я разработал все поведение, которое мне было нужно, за исключением одной детали.

Мне нужно установить де STATE_HALF_EXPANDED, по умолчанию это 50% экрана, а мне нужно 70%. Я посетил этот вопрос: Как я могу установить Half Expanded состояние для моего нижнего листа

В этом вопросе пользователь Adauton Heringer объясняет, как это сделать, в одном из ответов. Он сказал:

behavior = BottomSheetBehavior.from(your_bottom_sheet_xml)
behavior.isFitToContents = false
behavior.halfExpandedRatio = 0.6f

Я попробовал то же самое, потому что это выглядит очень просто. Я сделал две первые строки, но когда я пытаюсь использовать setHalfExpandedRatio(), как будто его не существует. Я проверил официальную документацию, и это общедоступный метод.

https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetBehavior#sethalfexpandedratio

Я делаю что-то неправильно?

Мой код таков:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        var bottomSheet: View = view.findViewById(R.id.departures_bottomsheet)
        bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
        bottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
        bottomSheetBehavior.isFitToContents = false

        // this doesn't work for me
        // bottomSheetBehavior.halfExpandedRatio = 0.7 

        bottomSheetBehavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
            override fun onSlide(p0: View, dragPoint: Float) {
                val upper = 0.66
                val lower = 0.33
                if (dragPoint >= upper) {
                    bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
                }
                if (dragPoint < upper && dragPoint >= lower) {
                    bottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
                }
                if (dragPoint < lower) {
                    bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
                }
            }

            override fun onStateChanged(p0: View, p1: Int) {

            }
        } )
    }

У меня есть этот импорт: import com.google.android.material.bottomsheet.BottomSheetBehavior

И эта реализация в build.gradle приложения: implementation 'com.google.android.material:material:1.0.0'

В файле макета View является потомком CoordinatorLayout.

<androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            android:id="@+id/globalMap"
            class="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <com.google.android.material.circularreveal.CircularRevealLinearLayout
            android:id="@+id/departures_bottomsheet"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            app:behavior_peekHeight="80dp"
            app:layout_behavior="@string/bottom_sheet_behavior">

Я перешел к BottomSheetBehavior.class в Android Studio, и этот метод не существует.

Любая помощь приветствуется, и я буду благодарен.

Если я не найду другого способа, я создам подкласс с помощью этого метода.


person chamarreta    schedule 20.12.2019    source источник
comment
вы находите какое-нибудь решение?   -  person brahmy adigopula    schedule 25.12.2019
comment
Ответ, данный Nhât Giang, полностью решил мою проблему.   -  person chamarreta    schedule 02.01.2020


Ответы (1)