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"
><Button
android: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;
@Override
protected 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"
><TextView
android:id="@+id/texto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="texto de botón"
/>
<Button
android: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;
@Override
protected 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{
@Override
public 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">
<TextView
android:id="@+id/texto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Seleccionar elemento"
/>
<Button
android: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"};
@Override
protected 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{
@Override
public 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">
<TextView
android:id="@+id/texto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Seleccionar elemento y confirmar"
/>
<Button
android: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"};
@Override
protected 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{
@Override
public 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">
<TextView
android:id="@+id/texto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="texto de botón"
/>
<Button
android: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];
@Override
protected 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{
@Override
public 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{
@Override
public 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">
<TextView
android:id="@+id/texto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="texto de botón"
/>
<Button
android: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">
<TextView
android:id="@+id/textoDial"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="botón de diálogo"
/>
<EditText
android:id="@+id/campoDial"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android: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;
@Override
protected 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);
}
@Override
public 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{
@Override
public void onClick(View view) {
texto.setText(edittext.getText().toString());
dismissDialog(id);
}
}
}
Para poder comentar es necesario iniciar sesión