我使用的是谷歌最近发布的AppCompat v23.2的BottomSheetBehavior
。我的底部页面的高度取决于底部页面中显示的内容(类似于Google在其地图应用程序中自己做的事情)。
它可以很好地处理最初加载的数据,但我的应用程序在运行时更改了显示的内容,当发生这种情况时,底部工作表保留在原来的高度,这要么导致底部没有使用的空间,要么是视图的剪切。
是否有办法通知底部页面布局重新计算用于展开状态的高度(当ViewGroup
的高度设置为MATCH_HEIGHT
时)或手动设置所需高度的任何方法?
编辑:我还尝试在ViewGroup
和它的父对象上手动调用invalidate()
,但都没有成功。
发布于 2016-03-05 03:29:10
我在RelativeLayout
上也遇到了同样的问题,就像我的底片一样。不会重新计算高度。我不得不通过新的重新计算的值来设置高度,并调用BottomSheetBehavior.onLayoutChild
。
这是我的临时解决方案:
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);
发布于 2016-02-29 17:43:13
为此,您可以使用BottomSheetBehavior#setPeekHeight
。
FrameLayout bottomSheet = (FrameLayout) findViewById(R.id.bottom_sheet);
BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setPeekHeight(newHeight);
这不会自动将底部板材移动到预览高度。您可以调用BottomSheetBehavior#setState
将底部工作表调整为新的窥视高度。
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
发布于 2016-10-27 00:16:09
虽然这个问题已经在>=24.0.0支持库中得到了解决,但是如果由于某些原因您仍然需要使用旧版本,这里有一个解决方法。
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) {
}
});
https://stackoverflow.com/questions/35685681
复制相似问题