【问题标题】:Method setHalfExpandedRatio(float ratio)方法 setHalfExpandedRatio(float ratio)
【发布时间】:2019-12-20 11:08:46
【问题描述】:

这是我在这个令人难以置信的社区的第一个问题。

我正在用 kotlin 开发一个 android 应用程序。我需要一个永久的底片(不是模态的)。我已经开发了我需要的所有行为,但只有一个细节。

我需要设置de STATE_HALF_EXPANDED,默认是屏幕的50%,但我需要70%。我访问过这个问题: How i can set Half Expanded state for my BottomSheet

在该问题中,用户 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">

我已导航到 Android Studio 中的 BottomSheetBehavior.class,但此方法不存在。

欢迎任何帮助,我将不胜感激。

如果我没有找到其他方法,我会用这个方法创建一个子类。

【问题讨论】:

  • 你找到解决办法了吗?
  • Nhât Giang 的回答完全解决了我的问题。

标签: android bottom-sheet


【解决方案1】:

BottomSheetBehavior.java 提交历史,方法setHalfExpandedRatio(float ratio) 从版本1.1.0-alpha05 添加。

您使用的是 vevrsion 1.0.0,这就是为什么您看不到此方法的原因。

解决方案:将 gradle 文件中的版本代码从 1.0.0 更改为 1.1.0-alpha05。

// implementation 'com.google.android.material:material:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha05'

或使用最新版本

// implementation 'com.google.android.material:material:1.0.0'
implementation 'com.google.android.material:material:1.2.0-alpha03'

您可以找到所有可用的版本here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多