Android 底部工作表布局边距

Posted

技术标签:

【中文标题】Android 底部工作表布局边距【英文标题】:Android bottom sheet layout margin 【发布时间】:2016-10-05 00:49:26 【问题描述】:

如何在片段的底部设置边距?

我在片段底部有一个线性布局,现在我想从该线性布局的顶部展开底部工作表

android:layout_marginBottom="36dp" 不起作用,底页覆盖了线性布局。

这是我的代码:

<LinearLayout
    android:layout_
    android:layout_
    android:background="@drawable/shadow"
    android:layout_gravity="bottom">

    <ImageView
        android:layout_
        android:layout_
        android:src="@mipmap/ic_add_white_24dp" />
</LinearLayout>

<LinearLayout
    android:id="@+id/bottom_sheet"
    android:layout_
    android:layout_
    android:background="#ff0000"
    app:behavior_hideable="true"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
    android:layout_marginBottom="36dp">

    <Button
        android:layout_
        android:layout_
        android:text="Test" />

</LinearLayout>

【问题讨论】:

看到这个***.com/questions/43852562/… 【参考方案1】:

我遇到了同样的问题,它有点破解,但我让它像这样工作。

基本上只是用底片做了一个透明的线性布局,然后在里面放一个视图。然后给出了透明的线性布局填充底部。

<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_
android:layout_
android:fitsSystemWindows="true"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="20dp"
>

<LinearLayout
    android:layout_
    android:layout_
    android:background="@color/white"
    android:gravity="center"
    >

    <ImageView
        android:layout_
        android:layout_
        android:transitionName="vatom"
        />

</LinearLayout>

<LinearLayout
    android:layout_
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
    android:elevation="300dp"
    android:paddingBottom="20dp"
    android:paddingTop="20dp"
    >

    <View
        android:layout_
        android:layout_
        android:background="@color/colorAccent"
        />


</LinearLayout>

【讨论】:

谢谢。这对我有用。当我使用 NestedScrollView 作为带有填充的容器时,我尝试了这个,但它不能正常工作,因为滚动视图的 match_parent 实际上并没有填满整个屏幕。将其更改为线性布局对我有用。【参考方案2】:

尝试使用 FrameLayout 将元素保存在根 LinearLayout 中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/paymentbottomsheet_view"
android:orientation="vertical"
android:background="#fff"
android:layout_
android:layout_
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
<FrameLayout
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:layout_
    android:layout_>
//Host another linear layout here to hold your elements.
</FrameLayout>
</LinearLayout>

【讨论】:

【参考方案3】:

您可以使用此代码为底页布局设置边距:

您只能更改此行上的0.9 lp.width = (displayMetrics.widthPixels * 0.9); 以更改您的边距大小。

        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(bottomSheetDialog.getWindow().getAttributes());

        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        lp.width = (displayMetrics.widthPixels * 0.9);
        bottomSheetDialog.getWindow().setAttributes(lp);
    

希望这有帮助。

【讨论】:

【参考方案4】:

我不知道底部边距,但对于水平(开始或结束)边距,以下解决方案解决了我的问题:

首先将这段代码写在themes.xml(以前称为style.xml)中:

<style name="bottomSheetDialog" parent="Theme.Design.BottomSheetDialog">
    <item name="bottomSheetStyle">@style/bottomSheetDialogStyle</item>
</style>

<style name="bottomSheetDialogStyle" parent="Widget.Design.BottomSheet.Modal">
    <item name="android:layout_marginStart">8dp</item>
    <item name="android:layout_marginEnd">8dp</item>
</style>

然后设置显示底页时的样式:

DisplayOrderBottomSheet().apply 

    setStyle(DialogFragment.STYLE_NORMAL, R.style.bottomSheetDialog)

.show(childFragmentManager)

【讨论】:

以上是关于Android 底部工作表布局边距的主要内容,如果未能解决你的问题,请参考以下文章

底页和 FAB 边距

如何在android的底部工作表顶部制作图像

在android应用程序中扩展底部工作表对话框

底部工作表的动画布局更改

Android BottomSheet展开到另一个视图的底部

Android 底部工作表模式(对话框)未完全打开