Представление BottomSheetDialogFragment становится прозрачным только после поворота устройства - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу создать BottomSheetDialogFragment с закругленными углами.

Что я сделал, чтобы достичь этого:

    <style name="AppTheme.TransparentBottomSheetStyle" parent="Theme.MaterialComponents.Light.BottomSheetDialog">
        <item name="android:background">@android:color/transparent</item>
    </style>

    <style name="AppTheme.BottomSheetDialogTheme" parent="Theme.MaterialComponents.Light.Dialog">
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:colorBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="bottomSheetStyle">@style/AppTheme.TransparentBottomSheetStyle</item>
    </style>

backdrop_shape.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#00FF00"/>

    <corners
            android:topLeftRadius="24dp"
            android:topRightRadius="24dp"/>
</shape>

И макет нижнего листа:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/backdrop_shape"
        android:paddingBottom="18dp">

И код:

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.AppTheme_BottomSheetDialogTheme)
    dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}

Это прекрасно работает с темой AppCompat, но не с MaterialComponents:

enter image description here

Как вы можете видеть, есть белый фон (я думаю, это родительский FrameLayout с идентификатором design_bottom_sheet).

И самое интересное, что когда я вращаюсьустройство (а затем поверните его обратно), оно становится прозрачным, как я хотел:

enter image description here

Это ошибка или функция?Как это исправить?

Примечание: Я перепробовал все решения, которые были размещены на SO и других сайтах, они также не работают на MaterialComponents.

1 Ответ

0 голосов
/ 15 ноября 2018

Согласно DialogFragment.setStyle :

Вызов для настройки основного вида и поведения диалогового окна фрагмента.Это может быть использовано для некоторых распространенных диалоговых режимов, позаботясь о выборе флагов, темы и других вариантов для вас.Этого же эффекта можно достичь, вручную установив атрибуты Dialog и Window. Вызов этого после создания диалога фрагмента не будет иметь никакого эффекта.

Я предполагаю, что, возможно, setStyle следует вызвать в или до onCreate.

...