gpt4 book ai didi

android - 扩展持久性 Bottom Sheet 时调整回收器 View 高度

转载 作者:太空狗 更新时间:2023-10-29 13:03:21 26 4
gpt4 key购买 nike

我有一个固定的 Bottom Sheet (基本上是一个按钮)和一个回收器 View ,它们都包含在 CoordinatorLayout 中。

展开 Bottom Sheet 时,我不希望它遮挡回收站 View 。我可以通过分别在 Bottom Sheet 中设置 app:layout_insetEdge="bottom" 和在回收器 View 中设置 app:layout_dodgeInsetEdges="bottom" 来实现这一点。

但是,由于回收器 View 的高度设置为 android:layout_height="match_parent",当 Bottom Sheet 展开时,它的顶部会部分移出屏幕。

相反,我希望回收器 View 根据 Bottom Sheet 的高度动态调整其高度,这样它就不会再移出屏幕。我怎样才能做到这一点?

这是完整的布局:

<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
app:layout_dodgeInsetEdges="bottom" />

<Button
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/update_all"
android:foreground="?attr/selectableItemBackground"
android:background="@drawable/angled_button"
app:behavior_hideable="false"
app:behavior_peekHeight="0dp"
app:layout_insetEdge="bottom"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior" />

</android.support.design.widget.CoordinatorLayout>

编辑:添加截图

没有 Bottom Sheet ,一切看起来都很好。 enter image description here

随着 Bottom Sheet 展开,回收站 View 不再完全可见。 enter image description here

编辑 2:添加 GIF

enter image description here

最佳答案

最近遇到同样的问题,没有找到比删除 app:layout_dodgeInsetEdges="bottom" 并改用填充更好的方法。这是如何实现的:

Kotlin :

val rv = findViewById<RecyclerView>(R.id.recycler_view))
val behavior = BottomSheetBehavior.from(findViewById<Button>(R.id.bottom_sheet))
behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback(){
override fun onSlide(bottomSheet: View, offset: Float) {
rv.setPadding(0, 0, 0, (bottomSheet.height * offset).toInt())
}

override fun onStateChanged(bottomSheet: View, newState: Int){}
})

Java:

RecyclerView rv = (RecyclerView) findViewById(R.id.recycler_view); 
BottomSheetBehavior behavior = BottomSheetBehavior.from(findViewById(R.id.bottom_sheet));
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
}

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
rv.setPadding(0, 0, 0, (int)(slidingView.getHeight() * offset));
}
});

优点:

  • 在屏幕上不重叠,既不与工具栏也不与 BottomSheet 按钮;
  • 不会破坏 FAB 的上移功能;
  • RecyclerView 滚动可以随着向上滑动 BottomSheet 一起完成;

缺点:

  • 不是纯 XML,需要编码;
  • 需要进行额外的更改以保持原始填充(但仍然可能并且相对容易做到)

关于android - 扩展持久性 Bottom Sheet 时调整回收器 View 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com