BottomSheetDialogFragment视图仅在设备旋转后才透明

时间:2018-11-14 23:17:57

标签: android material-design android-design-library material-components-android

我想创建带有圆角的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

如您所见,有白色背景(我想这是ID为design_bottom_sheet的父FrameLayout)。

最有趣的是,当我旋转设备(然后将其旋转回去)时,它会变得透明如我所愿:

enter image description here

是错误还是功能?如何解决?

注意:我已经尝试了所有在SO和其他网站上发布的解决方案,它们也无法在MaterialComponents上使用。

1 个答案:

答案 0 :(得分:1)

根据DialogFragment.setStyle

  

调用以自定义片段的基本外观和行为   对话。这可以用于一些常见的对话框行为,请小心   为您选择标志,主题和其他选项。效果一样   可以通过手动设置对话框和窗口属性来实现   你自己在创建片段的对话框后调用此命令   没有效果。

我猜测也许setStyle应该在onCreate之内或之前被调用。