我想创建带有圆角的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
:
如您所见,有白色背景(我想这是ID为design_bottom_sheet的父FrameLayout)。
最有趣的是,当我旋转设备(然后将其旋转回去)时,它会变得透明如我所愿:
是错误还是功能?如何解决?
注意:我已经尝试了所有在SO和其他网站上发布的解决方案,它们也无法在MaterialComponents
上使用。
答案 0 :(得分:1)
调用以自定义片段的基本外观和行为 对话。这可以用于一些常见的对话框行为,请小心 为您选择标志,主题和其他选项。效果一样 可以通过手动设置对话框和窗口属性来实现 你自己在创建片段的对话框后调用此命令 没有效果。
我猜测也许setStyle
应该在onCreate
之内或之前被调用。