web-dev-qa-db-fra.com

Supprimer l'arrière-plan noir dans la boîte de dialogue personnalisée

Je souhaite supprimer le fond noir de la boîte de dialogue personnalisée, comme indiqué dans l'image. Je suis sûr que l'arrière-plan noir provient du dialogue, pas de l'arrière-plan de l'application. 

custom dialog with black background around it ;

Code AlertDialog

public class MyAlertDialog extends AlertDialog { 
    public MyAlertDialog(Context context) 
    {  
        super(context); 
    }  

    public MyAlertDialog(Context context, int theme) 
    { super(context, theme); }
}

Code d'activité

public void showMyDialogOK(Context context, String s, DialogInterface.OnClickListener OkListener) {        
    MyAlertDialog myDialog = new MyAlertDialog(context, R.style.MyDialog2);        
    myDialog.setTitle(null); 
    myDialog.setMessage(s);        
    myDialog.setButton(DialogInterface.BUTTON_POSITIVE ,"Ok", OkListener);
    myDialog.show();    
}

Modes

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="MyTheme" parent="@Android:style/Theme.NoTitleBar.Fullscreen">
            <item name="Android:alertDialogStyle">@style/AlertDialog</item>  
        </style>    

        <style name="MyTheme2" parent="@Android:style/Theme.Black">
            <item name="Android:alertDialogStyle">@style/AlertDialog</item>    
        </style> 

        <style name="AlertDialog">        
            <item name="Android:fullDark">@null</item>
            <item name="Android:fullBright">@null</item>
            <item name="Android:topDark">@drawable/popup_top_dark</item>
            <item name="Android:topBright">@null</item>
            <item name="Android:centerBright">@null</item>
            <item name="Android:centerDark">@drawable/popup_center_dark</item>
            <item name="Android:centerMedium">@null</item>
            <item name="Android:bottomDark">@null</item>
            <item name="Android:bottomBright">@null</item>
            <item name="Android:bottomMedium">@drawable/popup_bottom_medium</item>
        </style>

        <style name="MyDialog2" parent="@Android:Theme.Dialog">        
            <item name="Android:windowBackground">@null</item>    
            <item name="Android:buttonStyle">@style/CustomButton</item>  
        </style>    

        <style name="CustomButton" parent="@Android:style/Widget.Button">        
            <item name="Android:background">@drawable/button_stateful</item>  
        </style>
</resources>

Ressources d'images

popup_center_dark.9.png

popup_center_dark.9.png

popup_bottom_medium.9.png

popup_bottom_medium.9.png

popup_top_dark.9.png

popup_top_dark.9.png

34
pengwang
public MyAlertDialog(
        Context context, 
        int theme
    ) extends AlertDialog { 

    super(context, theme);
    getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
}
83
Dipesh Rathod

Sonehow getWindow().setBackgroundDrawable() n'a pas fonctionné pour moi avec AlertDialog. J'ai trouvé une solution plus facile en utilisant Dialog . Voici mon 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.popup_window);
        dialog.show();
16
Khobaib

Essaye ça:

myDialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND);
11
Charu

Après avoir essayé des dizaines d'autres solutions à ce problème, voici ce qui a fonctionné pour moi:

<style name="translucentDialog" parent="Android:Theme.Holo.Dialog">
    <item name="Android:windowBackground">@Android:color/transparent</item>
</style>

Et puis en configurant mon dialogue pour utiliser ce thème.

7
Anson VanDoren

La méthode suivante a fonctionné pour moi:

getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
1
Gaurav Darji

// style de code dans style.xml:

<style name="translucentDialog" parent="Android:Theme.Holo.Dialog">
    <item name="Android:windowBackground">@Android:color/transparent</item>
</style>

// en activité: définir le style sur dialog:

   Dialog dialogconf = new Dialog(TreeAct.this, R.style.translucentDialog);
            dialogconf.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                   dialogconf.setContentView(R.layout.dialog_layout);
1
fk_androidd

vous pouvez créer une mise en page XML comme suit et définir cette mise en page dans le dialogue (dialog.xml) :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView Android:id="@+id/ScrollView01"
    Android:layout_width="fill_parent" Android:layout_height="fill_parent"
    xmlns:Android="http://schemas.Android.com/apk/res/Android" style="@style/white_background_bl_aatharv">

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="vertical" Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" Android:scrollbars="vertical"
        Android:scrollbarAlwaysDrawVerticalTrack="true" Android:id="@+id/instructions_view">

        <TextView Android:id="@+id/TextView01" Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" Android:textColor="#FFFFFF"
            Android:text="text here " />
    </LinearLayout>
</ScrollView>

voici le code pour définir la disposition de la boîte de dialogue d'alerte:

AlertDialog alert = cndtnsbuilder.create();
alert.setView(LayoutInflater.from(
currentactivity.this).inflate(
R.layout.dialog, null));
alert.show();
1
Shruti

Il suffit de changer le thème parent Dialog.

Avec fond noir

<style name="MyDialog2" parent="@Android:Theme.Dialog">        

Sans fond noir

<style name="MyDialog2" parent="@Android:style/Theme.DeviceDefault.Light.Dialog">
1
sakit

Pour supprimer la couleur d'arrière-plan, sur la disposition, il vous suffit de définir l'arrière-plan sur

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@null">
0
Pedro Romão
 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
0
influx

J'ai eu le même problème avec mon dialogue personnalisé basé sur le Alertdialog.Builder, qui avait un fond noir dans le titre et le corps quand j'utilise 

builder.setView(rootView)
  .setTitle(dialog_title)
  .setMessage(dialog_mesg)

solution was 1- Utilisez l’un des thèmes du générateur de dialogues d’alerte prédéfinis:

  • THEME_DEVICE_DEFAULT_DARK 
  • THEME_DEVICE_DEFAULT_LIGHT
  • THEME_HOLO_DARK
  • THEME_HOLO_LIGHT THEME_TRADITIONAL

THEME_DEVICE_DEFAULT_LIGHT a fonctionné mieux pour moi 

2 - définissez les couleurs du bouton de dialogue par défaut (positif/négatif) comme vous le souhaitez:

 Button b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
 Button d = mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
 b.setTextColor(ContextCompat.getColor(getActivity(), R.color.primary));
 d.setTextColor(ContextCompat.getColor(getActivity(), R.color.primary));

consultez l'article de blog ci-dessous pour plus de détails et d'astuces sur les options de thèmes: http://blog.supenta.com/2014/07/02/how-to-style-alertdialogs-like-a-pro/

testé sur Oreo 8.1 

0
JimmyFlash