Android BottomSheetDialogFragment имеет цвет за закругленными углами

Я использую BottomSheetDialogFragment и скругляю углы вверху справа/слева, и это работает правильно, но я заметил, что за закругленными углами он не прозрачен, и это очень раздражает.

Это заметно на скриншоте ниже:

введите описание изображения здесь

Как сделать их прозрачными?


person Vahid Amiri    schedule 08.01.2019    source источник
comment
Я получаю ту же проблему. Я использую библиотеку com.sothree.slidinguppanel:library:3.4.0 в своем приложении.   -  person Ajay Mehta    schedule 08.01.2019
comment
попробуйте добавить getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); в метод onStart() в вашем классе BottomSheetDialogFragment.   -  person Amrdroid    schedule 08.01.2019
comment
@Amrnoid Это не имеет значения.   -  person Vahid Amiri    schedule 09.01.2019
comment
удачи в поиске решения?   -  person Morteza Rastgoo    schedule 14.05.2019
comment
@MortezaRastgoo Нет, даже в некоторых приложениях Google есть эта ошибка.   -  person Vahid Amiri    schedule 14.05.2019
comment
Вы можете сделать это по-другому. Проверьте этот ответ.   -  person Gabriele Mariotti    schedule 21.09.2019


Ответы (3)


Создайте собственный стиль, как показано ниже.

 <style name="AppBottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
        <item name="bottomSheetStyle">@style/AppModalStyle</item>
    </style>

    <style name="AppModalStyle" parent="Widget.Design.BottomSheet.Modal">
        <item name="android:background">@drawable/rounded_corner_top_only</item>
    </style>

затем переопределите этот метод в пользовательском фрагменте.

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //bottom sheet round corners can be obtained but the while background appears to remove that we need to add this.
        setStyle(DialogFragment.STYLE_NO_FRAME,R.style.AppBottomSheetDialogTheme);
    }

Это работает со мной, надеюсь, это сработает с вами.

person Ejaz Ahmad    schedule 30.06.2019
comment
работает отлично ... спасибо - person Saiful Islam Sajib; 04.12.2020
comment
Я вошел в систему специально, чтобы проголосовать за ваш ответ. Это единственное, что помогло из нескольких других ответов на Stackoverflow! - person Shubham Rohila; 02.06.2021
comment
спасибо @Subham Rohila - person Ejaz Ahmad; 03.06.2021

Вы должны изменить bottom sheet theme, чтобы получить верхнюю круглую компоновку.

Создайте собственный drawable background_bottom_sheet_dialog_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
    <corners
       android:topLeftRadius="8dp"
        android:topRightRadius="8dp" />
    <padding android:top="0dp" />
    <solid android:color="@color/white" />
</shape>

Затем переопределите bottomSheetDialogTheme в styles.xml, используя рисунок в качестве фона:

<!--Bottom sheet-->
<style name="BottomSheet" parent="@style/Widget.Design.BottomSheet.Modal">
    <item 
    name="android:background">@drawable/background_bottom_sheet_dialog_fragment
    </item>
</style>

<style name="BaseBottomSheetDialog" 
    parent="@style/Theme.Design.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="bottomSheetStyle">@style/BottomSheet</item>
</style>

<style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog" />

Это изменит макет фона вашего нижнего листа.

ПРИМЕЧАНИЕ. Удалите весь фон из макета диалогового окна нижнего листа.

person Atul    schedule 09.04.2019
comment
не работает на API‹21. Как сделать это обратно совместимым? - person Morteza Rastgoo; 14.05.2019

Переопределите это в своем BottomSheetDialogFragment

@Override
public void setupDialog(Dialog dialog, int style) {
    View view = View.inflate(getContext(), R.layout.YOUR_LAYOUT, null);
    dialog.setContentView(view);
    ((View) view.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
person AlexS    schedule 23.04.2020