在Persistent BottomSheet内使用CoordinatorLayout,当BottomSheet处于COLLAPSED又名为peeked状态时,如何阻止BottomSheet覆盖其他用户界面元素?< /强>
我已成功将BottomSheet添加到导航抽屉和基于片段的应用;但是,如上所述,BottomSheet涵盖了我的片段容器中的用户界面元素COLLAPSED或EXPANDED
当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
要求OnLayoutChangedListener
为child
,使其无法实现在布局更改的侦听器回调中定义final
后更新height
。我仍然希望使用子类Behavior
解决问题,但暂时我很难过
我的下一个想法是使用height
标记为每个片段布局添加“间隔”视图。然后,我可以向<include/>
基本片段类提供add/show
和remove/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}