2012-05-22 34 views
6

Ho una finestra di dialogo personalizzata molto semplice e non voglio aggiungere un pulsante positivo senza dover modificare il file XML, proprio come lo faresti con un AlertDialog ma non so se sia possibile. Questo è il codice:Aggiungi pulsante positivo a 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

Allora perché non costruire un 'AlertDialog' e impostare il layout personalizzato su quella (o in realtà, il' Builder')? Vedi ['.setView (...)'] (http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView%28android.view.View%29). –

+0

Lo farò se è l'unica opzione, ma la mia sembra un modo più semplice per mostrare una finestra di dialogo. – JoeyCK

+0

Mi chiedo cosa 'sembra più facile' rispetto all'utilizzo di 'AlertDialog.Builder'? Inoltre, l'approccio sopra descritto non è conforme alle linee guida per gli sviluppatori, il che significa che consiglierei di cambiarlo, a prescindere da ciò che sembra. :) –

risposta

11

È necessario utilizzare il builder.

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

Per favore perdona la mia ignoranza, ma dove stai assegnando il layout in 'dialog_layout' al dialogo? – donturner

+0

Si è perso, ma lo si aggiungerebbe semplicemente come 'db.setView (dialog_layout)' – jhamm

2

È possibile utilizzare la classe AlertDialog.Builder:

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

creare una nuova istanza di esso con AlertDialog.Builder myAlertDialogBuilder = new AlertDialog.Builder(context). Quindi utilizzare metodi come setTitle() e setView() per personalizzarlo. Questa classe ha anche metodi per l'impostazione dei pulsanti. setPositiveButton(String, DialogInterface.OnClickListener) per impostare i pulsanti. Infine, utilizzare AlertDialog myAlertDialog = myAlertDialogBuilder.create() per ottenere l'istanza di AlertDialog, che è possibile personalizzare ulteriormente con metodi come setCancelable().

Edit: Inoltre, dalla documentazione:. http://developer.android.com/guide/topics/ui/dialogs.html

"La classe Dialog è la classe base per la creazione di finestre di dialogo Tuttavia, in genere non dovrebbe creare un'istanza di un dialogo diretto, invece, è necessario utilizzare uno dei ... sottoclassi "

Se davvero non si desidera utilizzare un AlertDialog, sarà probabilmente meglio estendere la classe Dialog da soli, anziché utilizzarlo così com'è.

1

È inoltre possibile utilizzare questa funzione

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(); 
} 
Problemi correlati