我在用户打开或关闭BottomSheet后调整RecyclerView高度,以便RecyclerView的高度位于ToolBar和我的BottomSheet之间。 问题是当高度发生变化时,向上或向下滚动会导致物品之间产生很大的差距 - 间隙实际上是一个宽度为0且高度更大的物品应该是这样的,这就是为什么它看起来像是一个间隙。 / p>
这是主要布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RegisterActivity">
<!-- includes the RecyclerView -->
<include layout="@layout/activity_register_sheet_content" />
<!-- includes the bottom sheet -->
<include layout="@layout/register_bottom_sheet" />
</android.support.design.widget.CoordinatorLayout>
和java:
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
ViewGroup.LayoutParams params = registerRecyclerView.getLayoutParams();
if (newState == STATE_COLLAPSED) {
params.height = originalRecyclerViewHeight;
registerRecyclerView.setLayoutParams(params);
} else if (newState == STATE_EXPANDED) {
params.height = realRecyclerHeight - bottomSheet.getMeasuredHeightAndState();
registerRecyclerView.setLayoutParams(params);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
我正在使用此版本的AppCompat:
implementation 'com.android.support:appcompat-v7:27.1.1'
感谢您的帮助!
答案 0 :(得分:0)
您需要使用浮点偏移量在重写的onSlide
方法中调整高度。正如docs所说,浮动偏移是:
此底页的新偏移量在[-1,1]范围内。抵消 随着这个底部纸张向上移动而增加。从0到1表 在折叠状态和展开状态之间,从-1到0 在隐藏和崩溃的状态之间。
您可以通过
获取底部纸张高度的值 int padding = bottomSheet.getHeight();
然后,您可以将其乘以浮动偏移量,以根据需要调整高度。 e.g。
int padding = bottomSheet.getHeight();
if (!Float.isNaN(slideOffset)) {
padding *= (1 - Math.abs(slideOffset));
}
然后使用该值设置回收者视图的高度。