在BottomSheetDialogFragment内安排布局,以便所有视图都能按预期放置

时间:2018-08-27 12:14:51

标签: android layout bottom-sheet

我有一个BottomSheetDialogFragment,上面有一些内容,底部有一个蓝色按钮(TextView)。我希望它始终固定在BottomSheetDialogFragment的底部,但我却无法这样做。大多数情况下,它位于正确的位置,但有时它似乎位于下方,像这样下面的屏幕截图:

enter image description here

无论如何,如何确保蓝色按钮始终固定在BottomSheetDialogFragment的底部?根视图是RelativeLayout,当我尝试设置android:layout_alignParentBottom="true"时,它没有解决问题。

2 个答案:

答案 0 :(得分:1)

只是一个黑客

  • 将底部按钮放在活动/片段(“底页”的父项)中。
  • 在可见底页时使其可见。
  • 在底页底部将按钮高度等于边距。 (不要与按钮重叠)
  • 关闭底板时使按钮不可见。

问题解决了。 :)

答案 1 :(得分:1)

因此,我发现了2个可能的解决方案,因此,在这里分享它们。

第一个解决方案是使BottomSheetDialogFragment展开到全屏显示,下面是如何完成此操作的示例:

View parent = (View) view.getParent();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) (parent).getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
BottomSheetBehavior bottomSheetBehavior = (BottomSheetBehavior) behavior;
bottomSheetBehavior.setPeekHeight(view.getMeasuredHeight());

然后,我们调整按钮在BottomSheetDialogFragment布局内的位置,例如,如果我们有RelativeLayout,则可以设置android:layout_alignParentBottom="true"。这样可以将BottomSheetDialogFragment展开(到全屏显示)时,按钮始终在屏幕底部对齐。

另一种解决方案(我认为是正确的解决方案)是将BottomSheetDialogFragment布局的所有内容包含在ScrollView内。这样,如果设备的高度不足,则将定位内容(包括按钮),但可以随时滚动至该位置。