Тема BottomSheetDialogFragment со скинами

Как совместить тему BottomSheetDialogFragment с другими темами?

В моем приложении есть скины, созданные с использованием тем. BottomSheetDialogFragment должен иметь закругленные углы, и я добиваюсь этого с помощью:

 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme) /* hack to make background transparent */
 }

Затем в styles.xml:

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

Но если я продолжу Theme.MaterialComponents.Light.BottomSheetDialog, я не получу цветовую схему, которую я определил в теме скина.

Итак, вопрос: как определить тему диалога внутри темы скина?


comment
вы устанавливаете какое-либо представление в BottomSheetDialogFragment в методе переопределения setupDialog?   -  person android    schedule 26.04.2019
comment
Определенно, я раздуваю XML. На самом деле я делаю это в onCreateView. Наконец, я скопировал вставку цветов из темы в тему диалога. Вроде единственное решение: /   -  person Angelina    schedule 28.04.2019


Ответы (2)


Вы можете добавить в свою тему приложения атрибут bottomSheetDialogTheme, чтобы глобально установить в вашем приложении стиль botomsheetDialog.

<style name="AppTheme" parent="Theme.MaterialComponents.*">
   ......
   <item name="bottomSheetDialogTheme">@style/BottomSheetDialog_Rounded</item>
</style>

<style name="BottomSheetDialog_Rounded" parent="@style/ThemeOverlay.MaterialComponents.BottomSheetDialog">
    <item name="bottomSheetStyle">@style/BottomSheet_Rounded</item>
</style>

В противном случае в вашем BottomSheetDialogFragment вы можете переопределить метод getTheme().

public class RoundedBottomSheetDialog extends BottomSheetDialogFragment {

  //....

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

Также, чтобы получить закругленные углы, вы можете использовать что-то вроде:

  <!-- 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>
person Gabriele Mariotti    schedule 25.09.2019

Попробуйте вместо этого

котлин

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

java

@Override
public int getTheme() {
     return R.style.CustomBottomSheetDialogTheme
}
person Anton Makov    schedule 23.09.2019