Cómo personalizar el diálogo en Android
En el proceso de desarrollo de Android, a menudo nos encontramos con algunos escenarios de demanda: aparece un cuadro emergente en la interfaz para recordarle al usuario y permitirle realizar ciertas operaciones selectivas.
Por ejemplo, la ventana emergente al cerrar sesión permite al usuario elegir "Salir" o "Cancelar" y otras operaciones.
El sistema Android proporciona la clase Dialog y las subclases Dialog, como AlertDialog, para implementar dichas funciones.
Generalmente, el uso del Diálogo y sus subclases proporcionadas por Android puede satisfacer la mayoría de estas necesidades. Sin embargo, sus deficiencias se reflejan en:
1. el estilo de sus subcategorías es único y es posible que el estilo no esté en armonía con la aplicación en sí;
2. Las ventanas emergentes de diálogo tienen un diseño y una función limitados y, en ocasiones, es posible que no satisfagan las necesidades comerciales reales.
Este artículo creará una ventana emergente de diálogo personalizada basada en Dialog, tomando como ejemplo el cuadro emergente de confirmación más común.
Este estilo es relativamente simple: hay un título de cuadro emergente (mensaje) en la parte superior y botones "Confirmar" y "Cancelar" a la izquierda y a la derecha debajo cuando el usuario hace clic en ". Botón "Confirmar", se ejecuta el cuadro emergente
Lógica de confirmación correspondiente, cuando se hace clic en el botón "Cancelar", se ejecuta la lógica de cancelación correspondiente.
Primero, personaliza el estilo de la ventana emergente:
1 lt;?xml version="1.0" encoding="utf-8"?gt;
2 lt; LinearLayout xmlns: android="/apk/res/android"
3 android: layout_width="match_parent"
4 android: layout_height="wrap_content"
5 android: background="@drawable/dialog_bg"
6 android: orientación="vertical" gt
7
8 lt;
9 android:id="@ id/title"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content" p >
12 android:layout_gravity="center"
13 android:paddingTop="14dp"
14 android:textColor="@color/login_hint"
15 android: textSize="@dimen/text_size_18" /gt;
16
17 lt;LinearLayout
18 android:layout_width="match_parent" "
19 android:layout_height="wrap_content"
20 android:layout_marginBottom="14dp"
21 android:layout_marginLeft="20dp"
22 android: layout_marginRight="20dp"
23 android: layout_marginTop="30dp" gt;
24
25 lt;TextView
26 android:id="@ id/confirm"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:layout_marginRight="10dp"
30 android:layout_weight="1"
31 andr
oid: background="@drawable/btn_confirm_selector"
32 android:gravity="center"
33 android:textColor="@color/white"
34 android: textSize="@dimen/text_size_16" /gt;
35
36 lt; TextView
37 android: id="@ id/cancelar "
38 android:layout_width="wrap_content"
39 android:layout_height="wrap_content"
40 android:layout_marginLeft="10dp"
41 android:layout_weight="1"
42 android:fondo="@drawable/btn_cancel_selector"
43 android:gravity="center"
44 android: textColor="@color/login_hint"
45 android: textSize="@dimen/text_size_16" /gt;
46 lt;/LinearLayoutgt;
47
48 lt;/LinearLayoutgt;
Luego, cree el control del cuadro de diálogo de confirmación ConfirmDialog heredando la clase Dialog:
1 paquete com. widget de maíz;
2
3 importar android.app.Dialog;
4 importar android.content.Context; importar android.os.Bundle;
6 importar android.util.DisplayMetrics;
7 importar android.view.LayoutInflater;
8 importar android.view. Ver;
9 importar android.view.Window
10 importar android.view.WindowManager
11 importar android.widget.TextView
12
13 import com.corn.R;
14
15 clase pública ConfirmDialog extiende el diálogo {
16
p>17 pri
contexto de contexto vate;
18 título de cadena privada;
19 cadena privada confirmButtonText;
20 cadena privada cacelButtonText;
21 interfaz ClickListener privada clickListenerInterface
22
23 interfaz pública ClickListenerInterface {
24
25 public void doConfirm(); >26
27 public void doCancel();
28 }
29
30 public ConfirmDialog(Contexto de contexto, Título de cadena, String confirmButtonText, String cacelButtonText) {
31 super(context, R.style.MyDialog);
32 this.context = context;
33 this. título = título;
34 this.confirmButtonText = confirmButtonText;
35 this.cacelButtonText = cacelButtonText
36 }
37
38 @Override
39 protected void onCreate(Bundle saveInstanceState) {
40 // TODO Código auxiliar de método generado automáticamente
41 super .onCreate(savedInstanceState);
42
43 init()
44 }
45
46 public void init() {
47 LayoutInflater inflador = LayoutInflater.from(context
48 Ver vista = inflador.inflate(R.layout.confirm_dialog, null);
49 setContentView(vista);
50
51 TextView tvTitle = (TextView) view.findViewById(R.id.title); p>52 TextView tvConfirmar
= (TextView) view.findViewById(R.id.confirm);
53 TextView tvCancel = (TextView) view.findViewById(R.id.cancel
54 ); p> p>
55 tvTitle.setText(título);
56 tvConfirm.setText(confirmButtonText);
57 tvCancel.setText(cacelButtonText);
58
59 tvConfirm.setOnClickListener(nuevo clickListener());
60 tvCancel.setOnClickListener(nuevo clickListener());
61
62 Ventana dialogWindow = getWindow();
63 WindowManager.LayoutParams lp = dialogWindow.getAttributes();
64 DisplayMetrics d = context.getResources().getDisplayMetrics( ); // Obtener el ancho y alto de la pantalla
65 lp.width = (int) (d.widthPixels * 0.8 // Establecer el alto en 0,6 de la pantalla
); 66 dialogWindow.setAttributes (lp);
67 }
68
69 public void setClicklistener(ClickListenerInterface clickListenerInterface) {
70 esto .clickListenerInterface = clickListenerInterface ;
71 }
72
73 la clase privada clickListener implementa View.OnClickListener {
74 @Override p>
75 public void onClick(View v) {
76 // TODO Código auxiliar de método generado automáticamente
77 int id = v.getId();
78 cambiar (id) {
79 caso R.id.confirm:
80 clickListenerInterface.doConfirm();
81
romper;
82 caso R.id.cancel:
83 clickListenerInterface.doCancel()
84 romper
85 }
86 }
87
88 }
89
90 }
En el código de construcción del espacio anterior, dado que la lógica de "confirmar" y "cancelar" del control está relacionada con el escenario de aplicación real, se implementa definiendo una interfaz interna en el control.
Donde necesites usar este control, haz la siguiente llamada:
1 public static void Exit(contexto final Context) {
2 final ConfirmDialog confirmDialog = new ConfirmDialog(context, "¿Está seguro de que desea salir?", "Salir", "Cancelar");
3 confirmDialog.show()
4 confirmDialog.setClicklistener; (new ConfirmDialog .ClickListenerInterface() {
5 @Override
6 public void doConfirm() {
7 // TODO Código auxiliar de método generado automáticamente p>
8 confirmDialog.dismiss();
9 //toUserHome(contexto);
10 AppManager.getAppManager().AppExit(contexto);
11 }
12
13 @Override
14 public void doCancel() {
15 // TODO Auto- código auxiliar del método generado
16 confirmDialog.dismiss();
17 }
18 });
La interfaz interna de este control se implementa en la llamada y se asigna al control mismo, de modo que cuando se hace clic en el botón, se implementa una devolución de llamada de función basada en una lógica empresarial externa específica.