2010-09-16 7 views
39

Je voudrais complètement redéfinir le composant de dialogue par défaut dans Android. Plus précisément, je voudrais faire:Comment créer un Dialogue/Popup entièrement personnalisé sous Android (changer la couleur de surimpression et la disposition de la fenêtre de dialogue)

  • Changer le fond de recouvrement semi-transparent du noir par défaut à un blanc semi-transparent.

  • Modifier la fenêtre de dialogue en supprimant la bordure du cadre fenêtré par défaut, et son remplacement par une mise en page défini en XML (il va juste être un graphique sans bordure avec flottant boutons. Pas de cadre réel.)

J'ai vu des tutoriels sur la création d'une mise en page personnalisée pour dans la boîte de dialogue (par exemple http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application), mais je ne l'ai pas vu quoi que ce soit en ce qui concerne changer la couleur de la superposition et/ou de personnaliser complètement la fenêtre de dialogue qui apparaît et le transformant plus en un overla y sans "fenêtre".

Répondre

82

Je l'ai résolu ce problème et créé mon propre superposition pop-up personnalisé avec un arrière-plan de superposition semi-transparente de couleur personnalisée en utilisant les étapes suivantes:

1 - Créer un nouveau fichier xml dans votre résolution/valeurs/dossier et name it styles.xml

2 - C'est ici que vous allez définir vos propriétés de dialogue. Voici à quoi ressemble le mien. 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 de votre choix. Voici mon fichier ci-dessous que je l'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 - Retour dans votre code Java, lors de la création de l'objet de dialogue, utilisez le constructeur qui passe à la fois le contexte et le thème. Par exemple. myDialog = new Dialog(this, R.style.CustomDialogTheme); (CustomDialogTheme est l'attribut de nom que j'ai spécifié dans le fichier styles.xml à partir de l'étape 2)

4 - Il vous suffit de définir l'affichage du contenu de vos objets de dialogue selon la disposition de votre boîte de dialogue. Par exemple. myDialog.setContentView(R.layout.my_custom_overlay); Si vous voulez que votre dialogue apparaisse au centre de l'écran, définissez son élément racine de android:layout_gravity à center

+4

cela se débarrasse de la bordure, mais il laisse encore des lignes noires autour de ma mise en page .. Des idées? –

19

Cela a très bien fonctionné pour moi, mais il manque comment fermer la boîte de dialogue. Si vous avez un bouton dans votre disposition 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(); 
    } 
}); 
+1

Merci d'avoir ajouté ce petit supplément d'info :) – justinl

Questions connexes