Setting maximum expanded height for bottomsheet dynamically

雨燕双飞 提交于 2019-12-10 11:34:08

问题


How to set maximum expanded height in android support design bottom sheet?

The question is an extension to the above question, i want to set the max expanded height of the sheet but dynamically according to the screen size.

I have tried setting new layout params to the view implementing bottomsheet behaviour but it does nothing good.


回答1:


Finally found it,

This question troubled me a lot with no solution reported anywhere, and the answer lies in the behavior itself.

The minimum offset is the max value upto which the bottomsheet should move and we set the lower cap of the value to our desired height upto which we want the bottomsheet to move. You can expose a function to set the value or do it direclty in our behavior.

To dynamically set the max expanded height for bottomsheet we need to increase the minimum offset value from 0 to our desired value in BottomSheetBehavior class, let me show the code.

Happy coding!!

         // The minimum offset value upto which your bottomsheet to move
         private int mMinOffset;

        /**
          * Called when the parent CoordinatorLayout is about the layout the given child view.
          */
        @Override
        public boolean onLayoutChild(CoordinatorLayout parent, V child, int layoutDirection) {
               int dynamicHeight = Utils.dpToPx(parent.getContext(), **your_value_in_dp**);
               mMinOffset = Math.max(dynamicHeight, mParentHeight - child.getHeight());
               mMaxOffset = Math.max(mParentHeight - mPeekHeight, mMinOffset);
               mAnchorOffset = Math.min(mParentHeight - mAnchorHeight, mMaxOffset);

               if (mState == STATE_EXPANDED) {
                    ViewCompat.offsetTopAndBottom(child, mMinOffset);
                    anchorViews(mMinOffset);
               } 
        }



回答2:


The simplest solution is to set the maxHeight property of the bottom sheet like this.

DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
 bottomSheet.setMaxHeight((int) (displayMetrics.heightPixels * 0.65));


来源:https://stackoverflow.com/questions/49333896/setting-maximum-expanded-height-for-bottomsheet-dynamically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!