碎片内容下面的持久性底部表格?

时间:2016-11-10 01:05:28

标签: android android-fragments android-coordinatorlayout bottom-sheet

Persistent BottomSheet内使用CoordinatorLayout,当BottomSheet处于COLLAPSED又名为peeked状态时,如何阻止BottomSheet覆盖其他用户界面元素?< /强>

我已成功将BottomSheet添加到导航抽屉和基于片段的应用;但是,如上所述,BottomSheet涵盖了我的片段容器中的用户界面元素COLLAPSEDEXPANDED

当BottomSheet展开时,覆盖部分片段是可以的,因为如果需要,用户可以将BottomSheet折叠到其peek状态。但是,我已明确禁用*用户隐藏BottomSheet,因此需要一种方法来确保当BottomSheet处于折叠状态时,片段容器始终位于BottomSheet之上。照片胜过千言万语,所以希望以下澄清问题

上图:带有两个按钮的片段的编辑屏幕截图,A&amp; B,靠近屏幕的底部。注意:片段的根是一个scrollview,这就是为什么按钮B被系统的后退和主页按钮切断

上图:与上面相同的片段,但BottomSheet完全展开。作为参考,BottomSheet是下面的所有内容,包括绿色条。注意:BottomSheet覆盖按钮A&amp; B是好的,因为BottomSheet已完全展开

上图:与上面看到的相同的片段,但BottomSheet处于折叠状态。注意:既然BottomSheet已完全折叠且无法进一步折叠,则可以看到问题在于它覆盖了按钮B的一部分,更重要的是片段在BottomSheet下方滚动

最初我希望通过子类AppBarLayout.ScrollingViewBehavior来解决这个问题,类似于这个answer。遗憾的是,我无法在CoordinatorLayout.Behavior#onDependentViewChanged内调整child视图的height。调用后,child的{​​{1}}显示为未设置(height),添加-1要求OnLayoutChangedListenerchild,使其无法实现在布局更改的侦听器回调中定义final后更新height。我仍然希望使用子类Behavior解决问题,但暂时我很难过

我的下一个想法是使用height标记为每个片段布局添加“间隔”视图。然后,我可以向<include/>基本片段类提供add/showremove/hide辅助方法,所有需要显示BottomSheet的片段都会扩展。此间隔视图将以编程方式分配BottomSheet的abstract,在片段内为其腾出空间。然后BottomSheet将覆盖间隔视图,因为我不认为它是片段可用视图区域的一部分。我目前正在努力实施这种方法,虽然我认为它会起作用但我怀疑这是一个很好的解决方案

欢迎任何建议,建议和潜在解决方案,并提前致谢!

以下是澄清我的顶级应用程序布局的精简版

peek height

*默认情况下<android.support.v4.widget.DrawerLayout> <android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.design.widget.CollapsingToolbarLayout> <ImageView ... /> <android.support.v7.widget.Toolbar ... /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <!-- All fragments assume the following view container via a FragmentTransaction's replace method which in pseudocode looks something like FragmentTransaction.replace(R.id.main_activity_fragment_container, fragment, ...).commit(); --> <FrameLayout android:id="@+id/main_activity_fragment_container" ... /> <com.xyz.abc.view.BottomSheetView ... /> <android.support.design.widget.FloatingActionButton ... /> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView ... /> </android.support.v4.widget.DrawerLayout> 显示为BottomSheetBehavior#mHideable}

0 个答案:

没有答案