2012-05-22 11 views
6

Ich habe einen sehr einfachen benutzerdefinierten Dialog und ich möchte eine positive Schaltfläche hinzufügen, ohne die XML-Datei zu ändern, genau wie Sie es mit einem AlertDialog tun würden, aber ich weiß nicht, ob es ist möglich. Dies ist der Code:Fügen Sie eine positive Schaltfläche zu Dialog

final Dialog dialog = new Dialog(MyActivity.this); 
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); 
dialog.setContentView(R.layout.dialog); 
dialog.setTitle("Settings"); 
dialog.show(); 
+0

Dann diese Funktion nutzen, warum Sie eine 'AlertDialog' und stellen Sie Ihr benutzerdefiniertes Layout auf, dass (oder eigentlich die' Builder') nicht bauen? Siehe ['.setView (...)'] (http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView%28android.view.View%29). –

+0

Ich werde, wenn es die einzige Option ist, aber mir scheint eine einfachere Möglichkeit, einen Dialog zu zeigen. – JoeyCK

+0

Ich frage mich, was "einfacher" im Vergleich zu "AlertDialog.Builder" scheint? Außerdem entspricht der obige Ansatz nicht den Entwicklerrichtlinien, was bedeutet, dass ich empfehlen würde, ihn zu ändern, egal wie es aussieht. :) –

Antwort

11

Sie sollten den Builder verwenden.

LayoutInflater inflater = LayoutInflater.from(this); 
View dialog_layout = inflater.inflate(R.layout.dialog,(ViewGroup) findViewById(R.id.dialog_root_layout)); 
AlertDialog.Builder db = new AlertDialog.Builder(MyActivity.this); 
db.setView(dialog_layout); 
db.setTitle("settings"); 
db.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    } 
}); 
AlertDialog dialog = db.show(); 
+1

Bitte verzeihen Sie meine Unwissenheit, aber wo ordnen Sie das Layout in 'dialog_layout' dem Dialog zu? – donturner

+0

Es wurde verpasst, aber Sie würden es einfach hinzufügen wie 'db.setView (dialog_layout)' – jhamm

2

können Sie die AlertDialog.Builder Klasse verwenden:

http://developer.android.com/reference/android/app/AlertDialog.Builder.html

Erstellen Sie eine neue Instanz davon mit AlertDialog.Builder myAlertDialogBuilder = new AlertDialog.Builder(context). Verwenden Sie dann Methoden wie setTitle() und setView(), um es anzupassen. Diese Klasse verfügt auch über Methoden zum Festlegen der Schaltflächen. setPositiveButton(String, DialogInterface.OnClickListener) zum Einrichten Ihrer Tasten. Schließlich verwenden Sie AlertDialog myAlertDialog = myAlertDialogBuilder.create(), um Ihre Instanz von AlertDialog abzurufen, die Sie dann mit Methoden wie setCancelable() weiter anpassen können.

Edit: Auch aus der Dokumentation. http://developer.android.com/guide/topics/ui/dialogs.html

„Die Dialog-Klasse ist die Basisklasse für Dialoge zu schaffen Allerdings sollten Sie in der Regel keinen Dialog instanziiert direkt Stattdessen Sie eine der verwendet werden sollen ... .subclasses "

Wenn Sie wirklich keinen AlertDialog verwenden möchten, ist es wahrscheinlich am besten, die Dialog-Klasse selbst zu erweitern, anstatt sie so zu verwenden, wie sie ist.

1

Sie können auch

public void showMessage(String title,String message) 
{ 
    AlertDialog.Builder builder=new AlertDialog.Builder(this); 
    builder.setCancelable(true); 
    builder.setTitle(title); 
    builder.setMessage(message); 
    builder.setPositiveButton("OK", new 
      DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
       } 
      }); 
    builder.show(); 
} 
Verwandte Themen