web-dev-qa-db-fra.com

Comment puis-je changer la "couleur" d'arrière-plan noir atténué par défaut (pas la quantité d'atténuation) du dialogue?

enter image description here

(Ceci est une image aléatoire montrant une Dialog trouvée sur Internet.)

J'ai implémenté une coutume Dialog. Je pouvais presque tout gérer dans la boîte de dialogue, à l'exception de l'arrière-plan noir par défaut situé sous la boîte de dialogue elle-même, mais sur tout l'écran situé derrière. En gros, je veux changer sa valeur couleur et sa valeur alpha.

J'ai parcouru StackOverflow, mais seules les réponses que j'ai trouvées concernaient le changement de fond de Dialog lui-même. En tout cas si vous en avez besoin, voici mes codes simples.

CustomDialog.Java

public class HTDialog extends Dialog{

    public HTDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setCanceledOnTouchOutside(true);
        setContentView(R.layout.custom_dialog);
    }
}

custom_dialog.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/dialog_root"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:minWidth="280dp"
    Android:background="@drawable/bg_popup"
    Android:paddingTop="20dp">

    <ImageView
        Android:id="@+id/dialog_image"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:src="@drawable/icon" />

</RelativeLayout>
12
Lee Han Kyeol

Il s’agit d’une solution de contournement, mais ce n’est pas vraiment une solution pure, car l’arrière-plan est désactivé et doit être configuré manuellement.

Commencez par définir un thème de dialogue personnalisé comme celui-ci.

styles.xml

<style name="CustomDialogTheme" parent="Android:Theme.Dialog">
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowIsFloating">false</item>
    <item name="Android:windowBackground">@Android:color/transparent</item>
</style>

Définir windowIsFloating sur false force le déploiement de la vue Dialog en plein écran. Définir windowBackground sur transparent supprime le fond noir sombre par défaut sous Dialog. L'option windowNoTitle supprime la barre de titre supérieure.

CustomDialog.Java

Appliquez le thème et construisez votre vue custom_dialog comme suit.

public HTCustomDialog(Context context) {
    super(context, R.style.CustomDialogTheme);
    setContentView(R.layout.custom_dialog);
}

custom_dialog.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/main_solid_80">

    <RelativeLayout
        Android:id="@+id/dialog_root"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:layout_marginLeft="50dp"
        Android:layout_marginRight="50dp"
        Android:background="@drawable/bg_popup"
        Android:padding="16dp">

</RelativeLayout>

Maintenant que la vue CustomDialog est une vue plein écran, définissez background de votre mise en page racine sur la couleur de votre choix.

Exemple de résultat

J'ai mosaïqué le résultat un peu.

Result

20
Lee Han Kyeol

utiliser un style personnalisé.

<style name="transparent_dialog_borderless" parent="Android:Theme.Dialog">
    <item name="Android:windowFrame">@null</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowIsTranslucent">true</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:background">#FF333333</item>
    <item name="Android:windowBackground">@null</item>
    <item name="Android:backgroundDimEnabled">true</item>
</style>

Android: backgroundDimEnabled: contrôle le fond noir et sombre 

2
howerknea

Essayez de définir le style de vos fenêtres de dialogue,

Exemple:

Dialog dialog = new Dialog(context,Android.R.style.Theme_Translucent_NoTitleBar);
0
Srinivasan

essayez le code,

View checkBoxView = View.inflate(context, R.layout.alertbox, null);



    final AlertDialog.Builder builder = new AlertDialog.Builder(context);

             builder.setView(checkBoxView);
             builder.setCancelable(false);
                d = builder.create();

                d.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                d.setView(checkBoxView, 0, 0, 0, 0);
                d.show();

nb: la ligne d.setView (checkBoxView, 0, 0, 0, 0); va le faire ...

0
Karthika PB