1. ホーム
  2. android

[解決済み] BottomSheetDialogFragmentの角丸について

2022-04-20 17:59:42

質問

BttomSheetDialogFragmentをカスタムし、BottomViewの上部に角丸をつけたいのですが。

これは、下から表示させたいレイアウトを膨らませる私のカスタムクラスです。

View mView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.charge_layout, container, false);
    initChargeLayoutViews();
    return mView;
}

そして、このXMLリソースファイルを背景として持っています。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <corners android:topRightRadius="35dp"
        android:topLeftRadius="35dp"
        />
    <solid android:color="@color/white"/>

    <padding android:top="10dp"
        android:bottom="10dp"
        android:right="16dp"
        android:left="16dp"/>
</shape>

問題は、このリソースファイルをLayoutのルート要素の背景に設定しても、角が丸くならないことです。

以下のコードは使えません。

this.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.charge_layout_background);

BottomSheetDialogのデフォルトの背景を上書きし、私のBottom Viewの上に半透明のグレー色が存在しなくなるからです。

解決方法は?

カスタムDrawableを作成する rounded_dialog.xml :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/white"/>
    <corners android:topLeftRadius="16dp"
        android:topRightRadius="16dp"/>

</shape>

をオーバーライドします。 bottomSheetDialogThemestyles.xml を背景として使用します。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">       
    <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
</style>

<style name="AppBottomSheetDialogTheme"
    parent="Theme.Design.Light.BottomSheetDialog">
    <item name="bottomSheetStyle">@style/AppModalStyle</item>
</style>

<style name="AppModalStyle"
    parent="Widget.Design.BottomSheet.Modal">
    <item name="android:background">@drawable/rounded_dialog</item>
</style>

これは、アプリのすべてのBottomSheetDialogsを変更します。