web-dev-qa-db-fra.com

Dialogue avec fond transparent sous Android

Comment puis-je supprimer le fond noir d'une boîte de dialogue sous Android? La photo montre le problème. 

enter image description here

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

Ajouter ce code 

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

Modifier

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>

utiliser en Java

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

J'espère vous aider!

73
LongLv

J'ai fait face au problème le plus simple et la solution que j'ai proposée consistait à appliquer un THÈME transparent. Écrivez ces lignes dans vos styles

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

Et puis ajouter 

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

dans votre fichier manifeste principal, à l'intérieur du bloc de l'activité de dialogue.

Plus dans votre ensemble XML d'activités de dialogue

 Android:background= "#00000000"
27
Fahad Ishaque

D'une manière ou d'une autre, la solution de Zacharias ne fonctionnait pas pour moi, alors j'ai utilisé le thème ci-dessous pour résoudre ce problème ...

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

On peut définir ce thème pour dialoguer comme ci-dessous

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

Prendre plaisir!!

13
Ravi K. Sharma

La boîte de dialogue contextuelle remplit la couleur d'arrière-plan noire ou la couleur de thème par défaut. Vous devez donc définir l'arrière-plan TRANSPARENT dans la boîte de dialogue. Essayez ci-dessous le code: -

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

Vous pouvez utiliser le:

setBackgroundDrawable(null);

method.And est la doc suivante:

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

Un problème que j'ai trouvé avec toutes les réponses existantes est que les marges ne sont pas préservées. En effet, ils remplacent tous l'attribut Android:windowBackground, responsable des marges, par une couleur unie. Cependant, j'ai fait quelques recherches dans le SDK Android et j'ai trouvé le fond dessinable de la fenêtre par défaut, que j'ai légèrement modifié pour autoriser les dialogues transparents. 

Commencez par copier /platforms/Android-22/data/res/drawable/dialog_background_material.xml dans votre projet. Ou, copiez simplement ces lignes dans un nouveau fichier:

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

Notez que Android:color est défini sur ?attr/colorBackground. C'est le gris/blanc plein par défaut que vous voyez. Pour permettre à la couleur définie dans Android:background dans votre style personnalisé d'être transparente et d'afficher la transparence, il suffit de remplacer ?attr/colorBackground par @Android:color/transparent. Maintenant ça va ressembler à ça:

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

Après cela, allez à votre thème et ajoutez ceci:

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

Assurez-vous de remplacer newly_created_background_name par le nom réel du fichier pouvant être dessiné que vous venez de créer et de remplacer some_transparent_color par le fond transparent souhaité.

Après cela, tout ce que nous devons faire est de définir le thème. Utilisez ceci lors de la création du AlertDialog.Builder:

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

Ensuite, construisez, créez et affichez le dialogue comme d'habitude!

7
IvonLiu

Essayez ceci dans votre code:

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

ça va marcher ... dans mon cas ...! mon ami

3
jigar

Même solution que zGnep mais utilisant xml:

Android:background="@null"
3
XST

C'est ce que j'ai fait pour atteindre la transparence avec AlertDialog.

Créé un style personnalisé:

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

Et créez ensuite le dialogue avec:

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

utilise ce code ça marche avec moi:

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

Attention :

n'utilisez pas de générateur pour modifier l'arrière-plan

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

changer à

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

Lors de l'utilisation de Dialog.builder - Cela ne donne pas l'option getwindow ().

1
Rasoul Miri

Pour quiconque utilisant une boîte de dialogue personnalisée avec une classe personnalisée, vous devez modifier la transparence de la classe, ajoutez cette ligne dans la méthode onCreate ():

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

si vous voulez détruire le fond sombre du dialogue utilisez cette 

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

Définissez ces codes de style dans le 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>

Et changez simplement false en true en dessous de la ligne

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

Cela atténuera votre arrière-plan.

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

c'est ma façon, vous pouvez essayer!

0
Hello Sun

Si vous avez étendu la classe DialogFrament, vous pouvez définir le thème avec:

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

Et ensuite créez le thème personnalisé dans votre fichier styles.xml (voir la réponse de @LongLv pour les paramètres)

N'oubliez pas d'ajouter <item name="Android:windowCloseOnTouchOutside">true</item> si vous souhaitez que la boîte de dialogue se ferme si l'utilisateur touche en dehors de la boîte de dialogue.

0
B.Cakir

Dans mon cas, la solution fonctionne comme ceci:

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

Et en plus, __.in XML de la boîte de dialogue personnalisée:

Android:alpha="0.8"
0
Sagar Shah