2010-03-06 6 views
17

J'essaie d'ouvrir une boîte de dialogue sur un widget. J'ai résolu le problème de skinning l'activité a commencé sur le clic avec android:theme="@android:style/Theme.Dialog". Malheureusement, je ne peux pas atteindre le même aspect d'un dialogue.Rendre l'activité Android ressemble à une boîte de dialogue

Ceci est le résultat:

Dialog from widget

Au lieu de cela, je voudrais arriver à ce résultat (à l'exception du bouton, bien sûr):

Desired dialog from widget

(la boîte de dialogue widget vous pouvez voir en gardant l'écran enfoncé)

Comme vous pouvez le voir il y a quelques différences: la couleur de les éléments de la liste, la couleur du texte et le séparateur d'élément de liste. Existe-t-il un thème/style prédéfini pour obtenir le même aspect d'un dialogue standard? Si non, quelles sont les étapes à suivre pour atteindre ce résultat?

J'ai vu que le widget fourni par FoxyRing a le comportement que je voudrais avoir.

Répondre

22

Pourquoi ne pas utiliser un « traditionnel » Activité principale avec une mise en page d'arrière-plan transparent

et appellent une boîte de dialogue standard de celui-ci?

... eh bien si je vous ai bien compris, cela rendrait l'affaire très facilement, n'est-ce pas?

+0

Oui ... Je pense que oui ... je vais essayer ... – Matroska

+5

Il fonctionne. J'ai mis en place une activité avec android: theme = "@ android: style/Theme.Translucent.NoTitleBar" et ensuite utilisé le code simple pour créer une liste de dialogue en gardant l'attention pour terminer l'activité sur le dialogue annuler/cliquer. – Matroska

+0

agréable d'entendre que cela a fonctionné comme vous le vouliez. À la vôtre, H. – Hubert

3

vous pouvez créer dynamiquement la boîte de dialogue comme celui-ci:

 Context mContext = this; 
     Dialog dialog = new Dialog(mContext); 

     dialog.setContentView(R.layout.data_dialog); 
     dialog.setTitle("Your title"); 

     AlertDialog.Builder builder; 
     AlertDialog alertDialog; 

     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.data_dialog, 
       (ViewGroup) findViewById(R.id.AbsoluteLayout01)); 

     builder = new AlertDialog.Builder(mContext); 
     builder.setView(layout); 
     alertDialog = builder.create(); 
     alertDialog.show(); 

     final EditText txtUsername = (EditText) layout.findViewById(R.id.txtUsername); 

     final AlertDialog thisDialog = alertDialog; 

     Button btnSave = (Button) layout.findViewById(R.id.btnSave); 
     btnSave.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       String strtxtUsername = txtUsername.getText().toString(); 

       //do something... 

      } 
     });     

Pour fermer la boîte de dialogue, appelez thisDialog.dismiss();

Le style ressemble à la Theme.Light.NoTitleBar régulière avec un ListView avec une icône et un Titre-Texte.

Espérons que ça aide!

+0

Le problème est de savoir comment l'appeler quand un widget est pressé. Il devrait être dans une activité ... et une activité doit toujours afficher quelque chose de bien? – Matroska

+0

Oh, désolé, je vous ai mal compris alors. Essayez le réglage du thème de l'activité à 'android: theme = "@ android: le style/Theme.Translucent.NoTitleBar"' – Nick

Questions connexes