Прозрачный фон диалогового окна нижнего листа Android

Я сделал диалог нижнего листа с макетом кадра. Все работает нормально, но я не могу сделать фон прозрачным.

Я задал прозрачный цвет как макету фрейма, так и родительскому макету пользовательского интерфейса диалога.

Вот код макета Frame:

<FrameLayout
            android:id = "@+id/nearby_bottom_sheet"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:background = "@android:color/transparent"
            app:layout_behavior = "com.google.android.material.bottomsheet.BottomSheetBehavior" />

Код для диалогового интерфейса нижнего листа:

<LinearLayout 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 = "wrap_content"
    android:layout_gravity = "bottom"
    android:background = "@android:color/transparent"
    android:orientation = "vertical">

    <com.google.android.material.card.MaterialCardView
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_gravity = "bottom"
        android:layout_marginStart = "6dp"
        android:layout_marginEnd = "6dp"
        app:cardCornerRadius = "20dp"
        app:cardElevation = "10dp"
        app:cardPreventCornerOverlap = "false"
        app:cardUseCompatPadding = "true">

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "vertical">

           ....
        </LinearLayout>

    </com.google.android.material.card.MaterialCardView>
</LinearLayout>

Вот как я инициализирую диалог:

FrameLayout bottom_sheet;
bottomSheetBehavior = BottomSheetBehavior.from(bottom_sheet);
View view = getLayoutInflater().inflate(R.layout.nearby_floating_sheet, null);
bottomSheetDialog = new BottomSheetDialog(getActivity());
bottomSheetDialog.setContentView(view);
bottomSheetDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
((View)view.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
bottomSheetDialog.show();

Вот мой вывод:

Может кто-нибудь, пожалуйста, помогите мне с этим.

это ответ на твой вопрос? stackoverflow.com/questions/37104960/…

Mohammed Alaa 14.12.2020 09:24
1
1
1 116
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Возможно, вам также следует сделать диалоговое окно прозрачным.

добавьте следующий код в свой BottomSheetDialog.

// BottomSheetDialog
public BottomSheetDialog(Context context) {
    super(context, R.style.Bottom_Sheet_Style); //set your own dialog theme
    // ...
    Window window = getWindow();
    window.setBackgroundDrawableResource(android.R.color.transparent);       
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.alpha = 1.0f;
    lp.dimAmount = 0.0f; 
    window.setAttributes(lp);
   // ...
}

Затем добавьте следующий код в файл res/values/styles.xml. Если у вас нет файла, создайте его.

<style name = "Bottom_Sheet_Style" parent = "@android:style/Theme.Dialog">  
    <item name = "android:windowBackground">@android:color/transparent</item>  
    <item name = "android:windowNoTitle">true</item>  
    <item name = "android:backgroundDimEnabled">true</item>  
</style>

Все тот же результат

Hasnain Ghias 14.12.2020 07:41

@HasnainGhias, можете ли вы опубликовать код темы диалога?

Ivan J. Lee 14.12.2020 07:48

Что вы подразумеваете под кодом темы. я новичок в андроиде

Hasnain Ghias 14.12.2020 08:13

@HasnainGhias Я изменил свой ответ, вы можете попробовать.

Ivan J. Lee 14.12.2020 09:50

для прозрачного фона вы должны применить тему при создании диалога сначала создайте стиль ниже

<item name = "android:background">@android:color/transparent</item>

затем примените его, используя BottomSheetDialog(this,R.style.yourStyle)

вы можете использовать bottomSheetDialog.getWindow().setDimAmount(0) для настройки затемнения

Другие вопросы по теме