2010-03-06 8 views
17

Ich versuche, einen Dialog auf Widget Klick zu öffnen. Ich habe das Problem gelöst, indem ich die Aktivität gestartet habe, die beim Klick mit android:theme="@android:style/Theme.Dialog" gestartet wurde. Leider kann ich nicht das gleiche Aussehen eines Dialogs erreichen.Machen Sie Android-Aktivität sieht wie Dialogfeld

Dies ist das Ergebnis:

Dialog from widget

Stattdessen würde Ich mag dieses Ergebnis erreichen (mit Ausnahme der Taste, natürlich):

Desired dialog from widget

(der Dialog-Widget Sie können sehen, halten Sie den Bildschirm gedrückt)

Wie Sie sehen können, gibt es einige Unterschiede: die Farbe von die Listenelemente, die Farbe des Textes und das Listenelementtrennzeichen. Gibt es ein vordefiniertes Design, um das gleiche Aussehen eines Standarddialogs zu erhalten? Wenn nicht, welche Schritte müssen unternommen werden, um dieses Ergebnis zu erreichen?

Ich habe gesehen, dass das von FoxyRing bereitgestellte Widget das Verhalten hat, das ich gerne hätte.

Antwort

22

Warum nicht eine „traditionelle“ Hauptaktivität mit einem transparenten Hintergrund Layout

und rufen Sie einen Standard-Dialog aus es verwenden?

... nun, wenn ich dich richtig verstanden habe, würde das den Trick sehr einfach machen, oder?

+0

Ja ... Ich denke mir so ... mal versuchen ... – Matroska

+5

Es funktioniert. Ich habe eine Aktivität mit Android eingerichtet: theme = "@ android: style/Theme.Translucent.NoTitleBar" und dann den einfachen Code verwendet, um einen Listendialog zu erstellen, der darauf achtet, die Aktivität im Dialogfeld abzubrechen. – Matroska

+0

schön zu hören, dass es so funktioniert hat, wie Sie es wollten. Prost, H. – Hubert

3

Sie könnte den Dialog wie folgt dynamisch erstellen:

 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... 

      } 
     });     

den Dialog zu schließen, rufen thisDialog.dismiss();

Der Stil sieht aus wie die regelmäßige Theme.Light.NoTitleBar mit einem Listview mit einem Symbol und ein Titel-Text.

Hoffe, dass hilft!

+0

Das Problem ist, wie es aufgerufen wird, wenn ein Widget gedrückt wird. Es sollte in einer Aktivität sein ... und eine Aktivität muss immer etwas richtig anzeigen? – Matroska

+0

Oh, Entschuldigung, ich habe dich dann falsch verstanden. Versuchen die Aktivität des Themas zu 'android Einstellung: theme = "@ android: style/Theme.Translucent.NoTitleBar"' – Nick