首页 > 解决方案 > 在Android中如何在滑动时获取BottomSheet的当前高度?

问题描述

当我在我的应用程序中滑动持久底部表时,我想知道那一刻底部表的当前高度。我尝试调用 BottomSheetCallback 的 onSlide 方法,但没有成功。

    bottomSheetView = findViewById(R.id.bottom_sheet);
    bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetView);
    bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            if(BottomSheetBehavior.STATE_DRAGGING == newState)
                Log.i("MainActivity", "onStateChanged  >>  " + bottomSheet.getHeight());
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            Log.i("MainActivity", "onSlide  bottomSheet>>  " + bottomSheet.getHeight());
            Log.i("MainActivity", "onSlide  bottomSheetView>>  " + bottomSheetView.getHeight());
        }
    });

标签: android

解决方案


我认为滑动时高度不会改变,因为底片的实际视图没有改变。底板本身只是向下滑动。

但是您仍然可以通过使用bottomSheetView 的locationOnScreen进行一点计算来获得高度。

例如:

bottomSheetBehavior.addBottomSheetCallback(object :
    BottomSheetBehavior.BottomSheetCallback() {
    override fun onSlide(bottomSheet: View, slideOffset: Float) {
        var locationOnScreen: IntArray = intArrayOf(0, 0)
        bottomSheet.getLocationOnScreen(locationOnScreen)
        Log.d(
            "BottomSheet",
            "slideOffset: $slideOffset - view height: ${locationOnScreen[0]},${locationOnScreen[1]}"
        )
    }

    override fun onStateChanged(bottomSheet: View, newState: Int) {
        Log.d("BottomSheet", "State: $newState")
    }
})

当 BottomSheet 向上/向下滑动时,locationOnScreen 的值会不断变化。


推荐阅读