2012-05-22 12 views
6

Tengo un cuadro de diálogo personalizado muy simple y quiero agregar un botón positivo sin tener que modificar el archivo XML, al igual que lo haría con un AlertDialog, pero no sé si es posible. Este es el código:Agregar botón 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

Entonces, ¿por qué no se construye un 'AlertDialog' y fija su diseño personalizado en la que (o en realidad, el' Builder')? Ver ['.setView (...)'] (http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView%28android.view.View%29). –

+0

Lo haré si es la única opción, pero la mía parece una forma más fácil de mostrar un diálogo. – JoeyCK

+0

Me pregunto qué 'parece más fácil' en comparación con el uso de 'AlertDialog.Builder'? Además, el enfoque anterior no cumple con las pautas del desarrollador, lo que significa que recomendaría cambiarlo, sin importar lo que parezca. :) –

Respuesta

11

Debe usar el constructor.

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

Por favor perdone mi ignorancia, pero ¿dónde está asignando el diseño en 'dialog_layout' al diálogo? – donturner

+0

Se lo perdió, pero solo lo agregará como 'db.setView (dialog_layout)' – jhamm

2

Usted puede utilizar la clase AlertDialog.Builder:

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

crear una nueva instancia de la misma con AlertDialog.Builder myAlertDialogBuilder = new AlertDialog.Builder(context). Luego use métodos como setTitle() y setView() para personalizarlo. Esta clase también tiene métodos para configurar los botones. setPositiveButton(String, DialogInterface.OnClickListener) para configurar sus botones. Finalmente, use AlertDialog myAlertDialog = myAlertDialogBuilder.create() para obtener su instancia de AlertDialog, que luego puede personalizar con métodos como setCancelable().

Editar: También, a partir de los documentos:. http://developer.android.com/guide/topics/ui/dialogs.html

"la clase de diálogo es la clase base para la creación de cuadros de diálogo Sin embargo, normalmente no debe crear una instancia de diálogo directamente su lugar, debe utilizar uno de los ... subclases "

Si realmente no desea utilizar un AlertDialog, probablemente sea mejor extender la clase Dialog usted mismo, en lugar de usarlo tal como está.

1

También puede utilizar esta función

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