Comment combiner le thème BottomSheetDialogFragment
avec d'autres thèmes?
Mon application a des skins qui sont créés à l'aide de thèmes. BottomSheetDialogFragment
doit avoir des coins arrondis, et j'y parviens en utilisant:
<style name="CustomBottomSheetStyle" parent="Widget.Design.BottomSheet.Modal"> <item name="android:background">@android:color/transparent</item> </style> <style name="CustomBottomSheetDialogTheme" parent="Theme.MaterialComponents.Light.BottomSheetDialog"> <item name="bottomSheetStyle">@style/CustomBottomSheetStyle</item> </style>
Puis dans styles.xml
: p >
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme) /* hack to make background transparent */ }
Mais si je m'étend du Theme.MaterialComponents.Light.BottomSheetDialog
, je n'obtiens pas le jeu de couleurs que j'ai défini dans le thème de la peau.
La question est donc: comment définir le thème Dialog dans le thème du skin?
3 Réponses :
override fun onCreateDialog(@Nullable savedInstanceState: Bundle?): Dialog val dialog = BottomSheetDialog(context!!,R.style.FullScreenBottomSheet) <style name="FullScreenBottomSheet" parent="Theme.MaterialComponents.Light.BottomSheetDialog"> <item name="android:windowFullscreen">false</item> <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:windowBackground">@color/transparent</item> <item name="android:statusBarColor">@color/transparent</item> </style>
Essayez plutôt ceci
kotlin
@Override public int getTheme() { return R.style.CustomBottomSheetDialogTheme }
java
override fun getTheme(): Int = R.style.CustomBottomSheetDialogTheme
Vous pouvez ajouter dans le thème de votre application l'attribut bottomSheetDialogTheme
pour définir globalement dans votre application le style BottomsheetDialog.
<!-- BottomSheet Dialog--> <style name="BottomSheetDialog_Rounded" parent="@style/ThemeOverlay.MaterialComponents.BottomSheetDialog"> <item name="bottomSheetStyle">@style/BottomSheet_Rounded</item> </style> <style name="BottomSheet_Rounded" parent="Widget.MaterialComponents.BottomSheet"> <item name="shapeAppearanceOverlay">@style/ShapeAppearanceBottomSheetDialog_Rounded</item> </style> <style name="ShapeAppearanceBottomSheetDialog_Rounded" parent=""> <item name="cornerFamily">rounded</item> <item name="cornerSizeTopRight">16dp</item> <item name="cornerSizeTopLeft">16dp</item> <item name="cornerSizeBottomRight">0dp</item> <item name="cornerSizeBottomLeft">0dp</item> </style>
définissez-vous une vue dans BottomSheetDialogFragment dans la méthode de remplacement "setupDialog"?
Certainement, je gonfle le XML. Je le fais dans onCreateView en fait. Enfin, j'ai fini par copier les couleurs du thème vers le thème de la boîte de dialogue. Semble être la seule solution: /