DialogFragmentの背景色を透明 or 指定する


やりたい事

マテリアルデザイン化したDialogFragmentの背景のグレー(スクリム)を透明 or 色を指定したい

スクリムとは何か?はMaterial Designガイドラインで説明されている
https://material.io/components/dialogs#anatomy

完成形

実装コード

やり方は style.xml or コードの2通りがある。

style パターン

style.xml

    <!-- https://material.io/components/dialogs/android#dialogs -->
    <style name="TransportDialog" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">

        <!-- 透明にする -->
        <item name="android:backgroundDimEnabled">false</item>

        <!-- 色を調整する -->
        <item name="backgroundDimAmount">10f</item>
    </style>

このstyleをDialogFragmentにセットする

class TransportDialogFragment : DialogFragment(R.layout.transparent_dialog_fragment) {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // スタイルをセット
        setStyle(STYLE_NORMAL, R.style.TransportDialog)
        return super.onCreateDialog(savedInstanceState)
    }

これで色が変更できた。

コード パターン


class TransportDialogFragment : DialogFragment(R.layout.transparent_dialog_fragment) {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return super.onCreateDialog(savedInstanceState).apply {
            // Dialog背景色を指定
            window?.setDimAmount(0f) // 0だと透明になるので適宜調整する
        }
    }
}

これでも色が変更できる。

全体コード

GitHubにUPしておいた

参考リンク

material-components-android/getting-started.md at master
https://github.com/material-components/material-components-android/blob/master/docs/getting-started.md

Dialogs - Material Design
https://material.io/components/dialogs