モーダルボトムシートダイアログにあるように、永続的なボトムシートにオーバーレイを追加することは可能ですか? フレームレイアウトを持ち、フラグメント トランザクションを実行するボトムシートを実装しました。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="2sp"
android:layout_marginRight="2sp"
android:layout_marginTop="?attr/actionBarSize"
android:clickable="true"
android:orientation="vertical"
app:elevation="4sp"
app:layout_behavior="@string/bottom_sheet_behavior">
<FrameLayout
android:id="@+id/function_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="2sp"
android:layout_marginRight="2sp"
android:layout_marginTop="?attr/actionBarSize"
android:background="#fafafa"
android:elevation="4sp">
</FrameLayout>
</LinearLayout>
展開して戻るボタンを押すと、フラグメントがスタックから削除されます。しかし、モーダル ダイアログを使用すると、ダイアログが閉じられます。
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.function_frame);
if (fragment.getFragmentManager().getBackStackEntryCount() == 0) {
if (mBottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
return;
}
}
super.onBackPressed();
}
そのため、永続的なダイアログを使用するとうまくいくことがわかりましたが、シートで覆われていない画面の領域にモーダル オーバーレイが必要です。