首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态更改BottomSheetBehavior的高度

动态更改BottomSheetBehavior的高度
EN

Stack Overflow用户
提问于 2016-02-29 01:17:54
回答 10查看 44.8K关注 0票数 46

我使用的是谷歌最近发布的AppCompat v23.2的BottomSheetBehavior。我的底部页面的高度取决于底部页面中显示的内容(类似于Google在其地图应用程序中自己做的事情)。

它可以很好地处理最初加载的数据,但我的应用程序在运行时更改了显示的内容,当发生这种情况时,底部工作表保留在原来的高度,这要么导致底部没有使用的空间,要么是视图的剪切。

是否有办法通知底部页面布局重新计算用于展开状态的高度(当ViewGroup的高度设置为MATCH_HEIGHT时)或手动设置所需高度的任何方法?

编辑:我还尝试在ViewGroup和它的父对象上手动调用invalidate(),但都没有成功。

EN

回答 10

Stack Overflow用户

发布于 2016-03-05 03:29:10

我在RelativeLayout上也遇到了同样的问题,就像我的底片一样。不会重新计算高度。我不得不通过新的重新计算的值来设置高度,并调用BottomSheetBehavior.onLayoutChild

这是我的临时解决方案:

代码语言:javascript
复制
coordinatorLayout = (CoordinatorLayout)findViewById(R.id.coordinator_layout);
bottomSheet = findViewById(R.id.bottom_sheet);

int accountHeight = accountTextView.getHeight();
accountTextView.setVisibility(View.GONE);

bottomSheet.getLayoutParams().height = bottomSheet.getHeight() - accountHeight;
bottomSheet.requestLayout();
behavior.onLayoutChild(coordinatorLayout, bottomSheet, ViewCompat.LAYOUT_DIRECTION_LTR);
票数 37
EN

Stack Overflow用户

发布于 2016-02-29 17:43:13

为此,您可以使用BottomSheetBehavior#setPeekHeight

代码语言:javascript
复制
FrameLayout bottomSheet = (FrameLayout) findViewById(R.id.bottom_sheet);
BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setPeekHeight(newHeight);

这不会自动将底部板材移动到预览高度。您可以调用BottomSheetBehavior#setState将底部工作表调整为新的窥视高度。

代码语言:javascript
复制
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
票数 16
EN

Stack Overflow用户

发布于 2016-10-27 00:16:09

虽然这个问题已经在>=24.0.0支持库中得到了解决,但是如果由于某些原因您仍然需要使用旧版本,这里有一个解决方法。

代码语言:javascript
复制
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull final View bottomSheet, int newState) {
            bottomSheet.post(new Runnable() {
                @Override
                public void run() {
                    //workaround for the bottomsheet  bug
                    bottomSheet.requestLayout();
                    bottomSheet.invalidate();
                }
            });
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
        }
    });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35685681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档