Диалог с прозрачным фоном в Android

Как удалить черный фон из диалогового окна в Android. На рисунке показана проблема.

enter image description here

final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger); 

Ответ 1

Добавьте этот код

 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

Или вместо этого:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

Ответ 2

<style name="NewDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

использовать в java

Dialog dialog = new Dialog(this, R.style.NewDialog);

Я надеюсь помочь вам!

Ответ 3

Я столкнулся с более простой проблемой, и в решении, которое я придумал, была применена прозрачная тестовая ТЕМА. Напишите эти строки в ваших стилях

    <item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

И затем добавьте

android:theme="@style/Theme.Transparent"

в вашем основном файле манифеста внутри блока активности диалога.

Плюс в вашем диалоговом действии XML-набор

 android:background= "#00000000"

Ответ 4

Каким-то образом решение Zacharias не сработало для меня, поэтому я использовал следующую тему для решения этой проблемы...

<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

Можно установить эту тему для диалога, как показано ниже

final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme); 

Наслаждаться!!

Ответ 5

Вы можете использовать:

setBackgroundDrawable(null);

. Далее следует документ:

  /**
    * Set the background to a given Drawable, or remove the background. If the
    * background has padding, this View padding is set to the background's
    * padding. However, when a background is removed, this View padding isn't
    * touched. If setting the padding is desired, please use
    * {@link #setPadding(int, int, int, int)}.
    *
    * @param d The Drawable to use as the background, or null to remove the
    *        background
    */

Ответ 6

Всплывающее диалоговое окно заполняет черный цвет фона по умолчанию или цвет темы, поэтому вам нужно установить TRANSPARENT фон в диалоге. Попробуйте следующий код: -

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();

Ответ 7

Одна проблема, которую я нашел со всеми существующими ответами, заключается в том, что поля не сохраняются. Это связано с тем, что все они переопределяют атрибут android:windowBackground, который отвечает за поля, с сплошным цветом. Тем не менее, я сделал некоторые копания в Android SDK и нашел фоновый рисунок фона по умолчанию, и немного изменил его, чтобы разрешить прозрачные диалоги.

Сначала скопируйте /platforms/android -22/data/res/drawable/dialog_background_material.xml в свой проект. Или просто скопируйте эти строки в новый файл:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="?attr/colorBackground" />
    </shape>
</inset>

Обратите внимание, что для параметра android:color установлено значение ?attr/colorBackground. Это стандартный серый/белый цвет по умолчанию. Чтобы цвет, определенный в android:background в вашем пользовательском стиле, был прозрачным и отображал прозрачность, все, что нам нужно сделать, это изменить ?attr/colorBackground на @android:color/transparent. Теперь это будет выглядеть так:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@android:color/transparent" />
    </shape>
</inset>

После этого перейдите к теме и добавьте следующее:

<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
    <item name="android:windowBackground">@drawable/newly_created_background_name</item>
    <item name="android:background">@color/some_transparent_color</item>
</style>

Обязательно замените newly_created_background_name на фактическое имя только что созданного файла и замените some_transparent_color на необходимый прозрачный фон.

После этого все, что нам нужно сделать, это установить тему. Используйте это при создании AlertDialog.Builder:

    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);

Затем просто создайте, создайте и покажите диалог как обычно!

Ответ 8

То же решение, что и zGnep, но с помощью xml:

android:background="@null"

Ответ 9

Попробуйте это в своем коде:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

он будет определенно работать... в моем случае...! мой frend

Ответ 10

Это то, что я сделал для достижения прозрачности с помощью AlertDialog.

Создан пользовательский стиль:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
    <item name="android:colorBackground">#32FFFFFF</item>
</style>

И затем создайте диалог с помощью:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

Ответ 11

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

dialog.getWindow().setDimAmount(0);

Ответ 12

используйте этот код, он работает со мной:

    Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
    dialog.show();

Ответ 13

Внимание:

не используйте конструктор для изменения фона

 Dialog dialog = new Dialog.Builder(MainActivity.this)
                            .setView(view)
                            .create();
 dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

изменить на

Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
mDialog.show();

При использовании Dialog.builder - в нем нет опции getwindow().

Ответ 14

Установите эти коды стиля в стиле

<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

И просто измените ложь на истину ниже линии

<item name="android:backgroundDimEnabled">true</item>

Это затемнит ваш фон.

Ответ 15

Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

Это мой путь, вы можете попробовать!

Ответ 16

В моем случае решение работает следующим образом:

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

И дополнительно в Xml настраиваемого диалога:

android:alpha="0.8"

Ответ 17

Если вы расширили класс DialogFrament, вы можете установить тему с помощью:

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);

А затем создайте собственную тему в своем файле styles.xml (параметры см. В ответе @LongLv)

Не забудьте добавить <item name="android:windowCloseOnTouchOutside">true</item> если вы хотите, чтобы диалог закрывался, если пользователь прикасается к окну.

Ответ 18

Для тех, кто использует настраиваемое диалоговое окно с настраиваемым классом, вам нужно изменить прозрачность в классе, добавив эту строку в onCreate():

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

Ответ 19

dialog.getWindow().setBackgroundDrawable(null);

Он имеет тот же эффект, что и:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));