web-dev-qa-db-fra.com

Comment créer un dialogue / pop-up entièrement personnalisé dans Android (changer la couleur de superposition et la disposition de la fenêtre de dialogue)

Je voudrais refaire peaufiner complètement le composant de dialogue par défaut dans Android. Plus précisément, je voudrais faire ceci:

  • Modifiez l'arrière-plan de superposition semi-transparent du noir par défaut en un blanc semi-transparent.

  • Modifiez la fenêtre de dialogue en supprimant la bordure de cadre fenêtré par défaut et en la remplaçant par une mise en page définie en XML (ce sera juste un graphique sans bordure avec des boutons flottants. Pas de cadre réel.)

J'ai vu des tutoriels sur la création d'une mise en page personnalisée dans la boîte de dialogue (par exemple http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-Android-application ), mais je n'ai rien vu concernant la modification de la couleur de la superposition et/ou la personnalisation complète de la fenêtre de dialogue qui apparaît et la transformant davantage en superposition sans "fenêtre".

39
justinl

J'ai résolu ce problème et créé ma propre superposition contextuelle personnalisée avec un arrière-plan de superposition semi-transparent coloré personnalisé en procédant comme suit:

1 - Créez un nouveau fichier xml dans votre dossier res/values ​​/ et nommez-le styles.xml

2 - C'est ici que vous définirez vos propriétés de dialogue. Voici à quoi ressemble la mienne. Si vous souhaitez remplacer la superposition noire semi-transparente par défaut qui s'affiche sur l'écran, vous devez définir windowIsFloating sur false et modifier l'arrière-plan de votre mise en page pour qu'elle soit de la couleur souhaitée. Voici mon fichier ci-dessous que j'ai utilisé:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomDialogTheme" parent="@Android:style/Theme.Dialog">
        <item name="Android:windowBackground">@color/transparent_white</item>
        <item name="Android:windowIsFloating">false</item>
        <item name="Android:windowNoTitle">true</item>
    </style>
</resources>

3 - De retour dans votre Java, lors de la création de l'objet de dialogue, utilisez le constructeur qui transmet à la fois le contexte ET le thème. Par exemple. myDialog = new Dialog(this, R.style.CustomDialogTheme); (CustomDialogTheme est l'attribut name) J'ai spécifié dans le styles.xml de l'étape 2)

4 - Réglez simplement la vue du contenu de vos objets de dialogue sur la disposition à laquelle vous voulez que votre boîte de dialogue ressemble. Par exemple. myDialog.setContentView(R.layout.my_custom_overlay); Si vous souhaitez que votre boîte de dialogue apparaisse au centre de l'écran, définissez Android:layout_gravity de son élément racine sur center

83
justinl

Cela a très bien fonctionné pour moi, mais il manque la façon de fermer la boîte de dialogue. si vous avez un bouton dans votre mise en page personnalisée pour le fermer, voici comment ajouter l'écouteur et fermer la fenêtre de dialogue.

final Dialog d = new Dialog(this,R.style.CustomDialogTheme);
d.setContentView(R.layout.custom_dialog);
d.show();

Button close_btn = (Button) d.findViewById(R.id.close_btn);
close_btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        d.dismiss();
    }
});
20
pmko