底部工作表对话框横向宽度问题

Posted

技术标签:

【中文标题】底部工作表对话框横向宽度问题【英文标题】:Bottom Sheet dialog landscape width issue 【发布时间】:2021-11-04 16:07:23 【问题描述】:

bottom_sheet_image_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_
android:layout_
app:behavior_hideable="false"
app:behavior_peekHeight="62dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:id="@+id/llAddDriverPic"
    android:background="?android:attr/selectableItemBackground"
    android:padding="8dp">

    <ImageView
        android:layout_
        android:layout_
        android:src="@drawable/baseline_add_photo_alternate_24"
        android:layout_margin="8dp"/>

    <TextView
        android:layout_
        android:layout_
        android:text="@string/add_picture"
        android:layout_gravity="center_vertical"
        android:padding="8dp"/>
</LinearLayout>

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:id="@+id/llRemoveDriverPic"
    android:background="?android:attr/selectableItemBackground"
    android:padding="8dp">

    <ImageView
        android:layout_
        android:layout_
        android:src="@drawable/baseline_no_photography_24"
        android:layout_margin="8dp"/>

    <TextView
        android:layout_
        android:layout_
        android:text="@string/remove_picture"
        android:layout_gravity="center_vertical"
        android:padding="8dp"/>

</LinearLayout>

代码实现:

BottomSheetDialog bsDialog = new BottomSheetDialog(getContext());
bsDialog.setContentView(R.layout.bottom_sheet_image_dialog);

bsDialog.setOnShowListener(dialog -> 
    BottomSheetBehavior bottomSheetBehavior = ((BottomSheetDialog)dialog).getBehavior();
    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
);

在issue 之后发生:视频中看到的宽度不会完全显示。 如果我在横向模式下从一开始就开始底部表,宽度看起来也不同,因为左侧和右侧没有被覆盖:

问题可能是什么? 是否需要在显示对话框之前预先定义宽度?

【问题讨论】:

【参考方案1】:

-> 你的xml布局没有问题,可以用Code解决。我在下面提供了一个解决此问题的示例。

=> 底页类代码

public class BottomSheet extends BottomSheetDialogFragment 

private View view;
private BottomSheetBehavior mBottomBehavior;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
    view = inflater.inflate(R.layout.bottom_sheet_layout, container, false);

  //Do your logic code here

    return view;


@Override
public void onStart() 
    super.onStart();
    mBottomBehavior = BottomSheetBehavior.from((View) view.getParent());
    mBottomBehavior.setMaxWidth(ViewGroup.LayoutParams.MATCH_PARENT);
    mBottomBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);

=> 活动类代码

Button button = findViewById(R.id.button);

button.setOnClickListener(v -> 

//To open the bottom sheet, NB. make sure 'BottomSheet' is the name you declared Bottom sheet class

    BottomSheet bottomSheet = new BottomSheet();
    bottomSheet.show(getSupportFragmentManager(), "exampleBottomSheet");
);

【讨论】:

以上是关于底部工作表对话框横向宽度问题的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在android的底部工作表对话框中隐藏软键

如何在颤动中更改底部工作表对话框内的文本?

从底部工作表对话框片段中获取价值

将数据从底部工作表对话框片段传递到片段

如何使底部工作表对话框的角变圆? [复制]