it-roy-ru.com

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

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

enter image description here

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

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

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

Правка

dialog.getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
593
Zacharias Manuel
<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);

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

73
LongLv

Я столкнулся с более простой проблемой, и решение, которое я нашел, заключалось в применении прозрачной темы Bachground. Напишите эти строки в ваших стилях

    <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"
27
Fahad Ishaque

Каким-то образом решение 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); 

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

13
Ravi K. Sharma

Всплывающее диалоговое окно заполняет по умолчанию черный фоновый цвет или цвет темы, поэтому вам нужно установить 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();
11
duggu

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

setBackgroundDrawable(null);

метод. И следующий документ:

  /**
    * Set the background to a given Drawable, or remove the background. If the
    * background has padding, this View's padding is set to the background's
    * padding. However, when a background is removed, this View's 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
    */
11
zionpi

Одна проблема, которую я нашел со всеми существующими ответами, состоит в том, что поля не сохранились. Это потому, что все они переопределяют атрибут 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);

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

7
IvonLiu

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

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

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

3
jigar

То же решение, что и в zGnep, но с использованием xml:

Android:background="@null"
3
XST

Это то, что я сделал, чтобы добиться прозрачности с 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();
3
Dileep P G

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

    Dialog dialog = new Dialog(getActivity(),Android.R.style.Theme_Translucent_NoTitleBar);
    dialog.show();
1
a.hammad

Внимание:

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

 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 ().

1
Rasoul Miri

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

getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
0
Haider Malik

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

dialog.getWindow().setDimAmount(0);
0
erfan

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

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

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

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

это мой способ, ты можешь попробовать!

0
Hello Sun

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

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

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

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

0
B.Cakir

В моем случае решение работает так:

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

И дополнительно в XML-файле настраиваемого диалога:

Android:alpha="0.8"
0
Sagar Shah