Diálogos en Android
Ventanas de diálogo en Android
Las ventanas de diálogo en Android son ventanas flotantes basadas en la clase Dialog y que permiten mostrar información o alguna indicación al usuario. A continuación un ejemplo de una ventana de diálogo básica.
VENTANA DE DIÁLOGO BÁSICA
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/boton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Mostrar"/></LinearLayout>
MainActivity.java
package xip.midominio.com.dialogs;import android.app.Dialog;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.view.View.OnClickListener;public class MainActivity extends AppCompatActivity implements OnClickListener{Button boton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);boton=(Button) findViewById(R.id.boton);boton.setOnClickListener(this);}public void onClick(View v){showDialog(0);}protected Dialog onCreateDialog(int id){Dialog dialog = null;if(id==0){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder = builder.setIcon(R.drawable.ic_launcher_foreground);builder=builder.setTitle("Diálogo");dialog = builder.create();}return dialog;}}
VENTANA DE DIÁLOGO CON BOTONES
La ventana de diálogo con botones ofrece una interacción al usuario con posibilidad de hasta tres botones.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/texto"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="texto de botón"/><Buttonandroid:id="@+id/boton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Mostrar"/></LinearLayout>
MainActivity.java
package xip.midominio.com.dialogs;import android.app.Dialog;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements OnClickListener{Button boton;TextView texto;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);texto = (TextView) findViewById(R.id.texto);boton=(Button) findViewById(R.id.boton);boton.setOnClickListener(this);}public void onClick(View v){showDialog(0);}protected Dialog onCreateDialog(int id){Dialog dialog = null;DialogoListener listener = new DialogoListener();if(id==0){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder = builder.setIcon(R.drawable.ic_launcher_foreground);builder=builder.setTitle("Diálogo con botones");builder=builder.setMessage("Selecciona botón");builder = builder.setPositiveButton("Afirmativo",listener);builder = builder.setNegativeButton("Negativo",listener);builder = builder.setNeutralButton("Neutral",listener);dialog = builder.create();}return dialog;}class DialogoListener implements DialogInterface.OnClickListener{@Overridepublic void onClick(DialogInterface dialogInterface, int i) {if(i == DialogInterface.BUTTON_POSITIVE){texto.setText("Positivo");}if(i == DialogInterface.BUTTON_NEGATIVE){texto.setText("Negativo");}if(i == DialogInterface.BUTTON_NEUTRAL){texto.setText("Neutral");}}}}
VENTANA DE DIÁLOGO CON ELEMENTOS
Ventana de diálogo que permite integrar una lista de elementos y realizar una acción determinada al seleccionar cada uno de los elementos.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/texto"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Seleccionar elemento"/><Buttonandroid:id="@+id/boton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Mostrar"/></LinearLayout>
MainActivity.java
package xip.midominio.com.dialogs;import android.app.Dialog;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements OnClickListener{Button boton;TextView texto;CharSequence[] items={"Procesador","Monitor","Tarjeta de red","Impresora"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);texto = (TextView) findViewById(R.id.texto);boton=(Button) findViewById(R.id.boton);boton.setOnClickListener(this);}public void onClick(View v){showDialog(0);}protected Dialog onCreateDialog(int id){Dialog dialog = null;DialogoListener listener = new DialogoListener();if(id==0){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder = builder.setIcon(R.drawable.ic_launcher_foreground);builder=builder.setTitle("Diálogo con elementos");builder.setItems(items,listener);dialog = builder.create();}return dialog;}class DialogoListener implements DialogInterface.OnClickListener{@Overridepublic void onClick(DialogInterface dialogInterface, int i) {texto.setText("Elemento "+i);}}}
DIÁLOGO CON ELEMENTOS Y CONFIRMACIÓN
Esta ventana es similar a la anterior pero requiere de un paso más de confirmación.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/texto"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Seleccionar elemento y confirmar"/><Buttonandroid:id="@+id/boton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Mostrar"/></LinearLayout>
MainActivity.java
package xip.midominio.com.dialogs;import android.app.Dialog;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements OnClickListener{Button boton;TextView texto;CharSequence[] items={"Procesador","Monitor","Tarjeta de red","Impresora"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);texto = (TextView) findViewById(R.id.texto);boton=(Button) findViewById(R.id.boton);boton.setOnClickListener(this);}public void onClick(View v){showDialog(0);}protected Dialog onCreateDialog(int id){Dialog dialog = null;DialogoListener listener = new DialogoListener();if(id==0){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder = builder.setIcon(R.drawable.ic_launcher_foreground);builder=builder.setTitle("Diálogo con elementos confirmados");builder.setSingleChoiceItems(items,0,listener);builder.setPositiveButton("OK",listener);builder.setNegativeButton("Cancelar",listener);dialog = builder.create();}return dialog;}class DialogoListener implements DialogInterface.OnClickListener{@Overridepublic void onClick(DialogInterface dialogInterface, int i) {int it = 0;if(i >= 0){texto.setText("Item " + i);}if(i == DialogInterface.BUTTON_NEGATIVE){texto.setText("Opción cancelada" + i);}}}}
VENTANA DE DIÁLOGO CON MÚLTIPLES ELEMENTOS
Este tipo de ventana es similar a la anterior con la diferencia de que permite seleccionar varios elementos simultáneamente.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/texto"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="texto de botón"/><Buttonandroid:id="@+id/boton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Mostrar"/></LinearLayout>
MainActivity.java
package xip.midominio.com.dialogs;import android.app.Dialog;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements OnClickListener{Button boton;TextView texto;CharSequence[] items={"Procesador","Monitor","Tarjeta de red","Impresora"};boolean[] seleccionados = new boolean [items.length];@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);texto = (TextView) findViewById(R.id.texto);boton=(Button) findViewById(R.id.boton);boton.setOnClickListener(this);}public void onClick(View v){showDialog(0);}protected Dialog onCreateDialog(int id){Dialog dialog = null;DialogoListener listener = new DialogoListener();MultipleListener multipleListener = new MultipleListener();if(id==0){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder = builder.setIcon(R.drawable.ic_launcher_foreground);builder=builder.setTitle("Diálogo con opciones");builder.setMultiChoiceItems(items,seleccionados,multipleListener);builder.setPositiveButton("OK",listener);builder.setNegativeButton("Cancelar",listener);dialog = builder.create();}return dialog;}class DialogoListener implements DialogInterface.OnClickListener{@Overridepublic void onClick(DialogInterface dialogInterface, int i) {if(i >= DialogInterface.BUTTON_POSITIVE){texto.setText("Items ");for(int j = 0;j<seleccionados.length;j++){if(seleccionados[j]){texto.append("\n"+items[j]);}}}if(i == DialogInterface.BUTTON_NEGATIVE){texto.setText("Opción cancelada");}}}class MultipleListener implements DialogInterface.OnMultiChoiceClickListener{@Overridepublic void onClick(DialogInterface dialogInterface, int i, boolean seleccionados) {}}}
VENTANA DE DIÁLOGO PERSONALIZADO
Este tipo de ventana de diálogo permite añadir los elementos de forma personalizada mediante un segundo layout y la clase onCreateDialog. Es el tipo de ventana de diálogo más compleja.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/texto"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="texto de botón"/><Buttonandroid:id="@+id/boton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Mostrar"/></LinearLayout>
dialogo.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="//schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/textoDial"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="botón de diálogo"/><EditTextandroid:id="@+id/campoDial"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/botonDial"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="botón de diálogo"/></LinearLayout>
MainActivity.java
package xip.midominio.com.dialogs;import android.app.Dialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements OnClickListener{TextView texto;Button boton;TextView textoD;EditText edittext;Button botonD;int id = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);texto = (TextView) findViewById(R.id.texto);boton=(Button) findViewById(R.id.boton);boton.setOnClickListener(this);}@Overridepublic void onClick(View view) {showDialog(id);}protected Dialog onCreateDialog(int id){Dialog dialog = new Dialog(this);Window window = dialog.getWindow();int flag = WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;window.setFlags(flag,flag);dialog.setTitle("Diálogo personalizado");dialog.setContentView(R.layout.dialogo);textoD = (TextView) dialog.findViewById(R.id.textoDial);edittext = (EditText) dialog.findViewById(R.id.campoDial);botonD = (Button) dialog.findViewById(R.id.botonDial);botonD.setOnClickListener(new Dialogo());return dialog;}class Dialogo implements OnClickListener{@Overridepublic void onClick(View view) {texto.setText(edittext.getText().toString());dismissDialog(id);}}}
Para poder comentar es necesario iniciar sesión