2
votes

Thème BottomSheetDialogFragment avec skins

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?


2 commentaires

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: /


3 Réponses :


0
votes
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>

0 commentaires

1
votes

Essayez plutôt ceci

​​ kotlin

@Override
public int getTheme() {
     return R.style.CustomBottomSheetDialogTheme
}

java

override fun getTheme(): Int = R.style.CustomBottomSheetDialogTheme


0 commentaires

2
votes

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>


0 commentaires