Diferencia entre revisiones de «Usuario:ManuelRomero/Android/PrimerosContactos/Dialogo»
De WikiEducator
(Página reemplazada por '{{:Usuario:ManuelRomero/Android/PrimerosContactos/nav}}') |
|||
Línea 1: | Línea 1: | ||
{{:Usuario:ManuelRomero/Android/PrimerosContactos/nav}} | {{:Usuario:ManuelRomero/Android/PrimerosContactos/nav}} | ||
+ | <br> | ||
+ | ===Concepto de cajas de dialogo=== | ||
+ | *Son widgets que contienen informción para el usuario | ||
+ | *La información se presenta en una ventana aparte de la aplicación | ||
+ | *La ventana puede tener botones para que el usuario interactúe | ||
+ | *Puede pedir información o simplemente aceptar o confirmar algo | ||
+ | *Iremos presentando las diferentes opciones que se plantean | ||
+ | ===Métodos para presentar los diálogos=== | ||
+ | *Existen dos métodos | ||
+ | #Basado en versiones anteriores | ||
+ | ##los diálogos los gestiona la clases '''''activity''''' desde una pila | ||
+ | ##Los diálogos no se comparten entre actividades | ||
+ | ##Muchos métodos utilizados están obsoletos | ||
+ | ##Es el más fácil de implementar | ||
+ | #Basado en fragmentos | ||
+ | ##Usados desde el API 11 (Android 3.0) | ||
+ | ##Puede funcionar con versiones anteriores si usamos el ''paquete de soporte Android'' | ||
+ | ##Los diálogos los gestiona '''''FragmentManager''''' ''android.app.FragmentManager | ||
+ | ##Los diálogos son un tipo especial de fragmento | ||
+ | ===Tipos de diálogo=== | ||
+ | |||
+ | ;Dialog | ||
+ | ;AlertDialog | ||
+ | ;CharacterPickerDialog | ||
+ | ;DatePickerDialog | ||
+ | ;ProgressDialog | ||
+ | ;TimePickerDialog | ||
+ | ;Dialogo personalizado | ||
+ | ;Toast | ||
+ | |||
+ | ===Modificando la interfaz=== | ||
+ | *Añadimos un botón | ||
+ | ;Referencia | ||
+ | http://developer.android.com/reference/android/widget/Button.html | ||
+ | *Los elementos gráficos los podemos añadir de dos maneras | ||
+ | #En el fichero java directamente | ||
+ | #En el fichero xml que descrive el layout de la ventana donde queremos que aparezcan | ||
+ | *Lo haremos en el fichero xml por simplicidad | ||
+ | *La idea es que al hacer click salga un mensaje emergente | ||
+ | <source lang=xml> | ||
+ | <Button | ||
+ | android:id="@+id/button1" | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:text="Mensaje Toast" | ||
+ | android:onClick="clickToast"/> | ||
+ | </source> | ||
+ | *Entre los atributos vemos que está '''''onClick''''' | ||
+ | *Este atributo especifica el nombre del método que se va a ejecutar cuando ocurra la acción | ||
+ | *En el código ese método recibirá la vista de este layout como parámetro | ||
+ | ===El fichero java=== | ||
+ | *Escribimos el código para que aparezca el mensaje | ||
+ | *Básicamente lo que haremos es escribir el código de este método '''''clickToast''''' | ||
+ | *Este método recibe como argumento la vista donde está el botón ç | ||
+ | *En él instanciaremos un objeto de la clase '''''Toast''''' | ||
+ | ===Clase Toast=== | ||
+ | clase definida en el paquete '''''widgwt''''' | ||
+ | android.widget.Toast | ||
+ | ;Referencia | ||
+ | http://developer.android.com/guide/topics/ui/notifiers/toasts.html | ||
+ | *Esta clase implementa la ventana mas sencilla de diálogo | ||
+ | *Es simplemente un alert o MsgBox con un solo parámetro, | ||
+ | *El parámetro es el texto que visualiza | ||
+ | *Se visualiza independientemente del activity de la aplicación | ||
+ | *Por lo que no oculta la activity que sigue visible y activa | ||
+ | *El mensaje generado por '''''Toast''''' desaparece cuando se cumple un ''timeout'' | ||
+ | |||
+ | <!-- Aclarar esto de la vista--> | ||
+ | *Un objeto de la clase Toast se puede instanciar con un método estático '''''makeText''''' de la misma clase | ||
+ | <source lang=java> | ||
+ | makeText(contexto, texto, duracion) | ||
+ | </source> | ||
+ | Este métod recibe tres parámetros | ||
+ | ;contexto | ||
+ | :Objeto que describe el en entorno actual de la interfaz de la aplicación | ||
+ | ;texto | ||
+ | :La cadena de caracteres que se va a visualizar | ||
+ | ;duración | ||
+ | :tiempo en el que dura la ventana emergente | ||
+ | :puede tomar dos valores como constantes de la propia clase | ||
+ | LENGTH_LONG | ||
+ | LENGTH_SHORT | ||
+ | El método que añadimos es el siguiente | ||
+ | <source lang=java> | ||
+ | public void clickToast(View v){ | ||
+ | Context contesto = getApplicationContext(); | ||
+ | CharSequence texto = "Este ejemplo ha funcionado FACIL!!!!"; | ||
+ | int duracion = Toast.LENGTH_LONG; | ||
+ | |||
+ | Toast mensaje = Toast.makeText(contesto, texto, duracion); | ||
+ | mensaje.show(); | ||
+ | } | ||
+ | </source> | ||
+ | ===Ventana dialogo con ckeckbox=== | ||
+ | *A continución realizaremos otra ventana de diálogo | ||
+ | *Seguimos usando el mismo proyecto | ||
+ | *En ella el usuario debe checkear distintas opciones (seleccionar idiomas) | ||
+ | *En la misma confirmaremos o cancelaremos la selección | ||
+ | ===Realización de la práctica=== | ||
+ | *Modificamos el interfaz | ||
+ | <source lang=xml> | ||
+ | <Button | ||
+ | android:id="@+id/button2" | ||
+ | android:layout_width="wrap_content" | ||
+ | android:layout_height="wrap_content" | ||
+ | android:text="Opciones Lengaje" | ||
+ | android:onClick="clickMesajeOpciones"/> | ||
+ | </source> | ||
+ | *Definimos un array de opciones | ||
+ | <source lang=java> | ||
+ | CharSequence[] idiomas={"Españlo","Inglés","Alemán"}; | ||
+ | boolean [] idiomasSeleccionados=new boolean[idiomas.length]; | ||
+ | </source> | ||
+ | |||
+ | <source lang=java> | ||
+ | public void clickDialogoOpciones(View v){ | ||
+ | showDialog(0); | ||
+ | } | ||
+ | </source> | ||
+ | *El uso del método showDialog esta depreciado a partir de la versión 3.0 de android. | ||
+ | *El argumento indica un determinado cuadro de diálogo a mostrar | ||
+ | |||
+ | *implementamos el método '''''clickMesajeOpciones''''' | ||
+ | *Este método lo que hace es llamar al método '''''onCreateDialog()''''' que hay que sobreescribir | ||
+ | *Retorna un objeto Dialog que hay que importar de la clase import android.app.Dialog; | ||
+ | |||
+ | |||
+ | *Para mostrar el código debemos implementar el método '''''onCreateDialog(int)''''' | ||
+ | *Para crear un cuadro de diálogo utiliza el constructur '''''Buider''''' de la clase '''''AlertDialog''''' | ||
+ | *Se establecen las propiedades como icono, título, botones, casillas de verificación, ... | ||
+ | *se invoca al método create del objeto builder | ||
+ | <source lang=java> | ||
+ | Builder ventanaDialogo = new AlertDialog.Builder(this); | ||
+ | ventanaDialogo.setIcon(R.drawable.ic_launcher); | ||
+ | ventanaDialogo.setTitle("Ejemplo de cuadro diálogo 1 con texto" ); | ||
+ | ventanaDialogo.setPositiveButton("SI", new DialogInterface.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(DialogInterface dialog, int which) { | ||
+ | // TODO Auto-generated method stub | ||
+ | Context contesto = getBaseContext(); | ||
+ | int duracion=Toast.LENGTH_LONG; | ||
+ | Toast.makeText(contesto,"OK seleccionado",duracion).show(); | ||
+ | } | ||
+ | }); | ||
+ | </source> | ||
+ | ===Barra de progreso=== | ||
+ | *En este caso usaremos un objeto ProgressDialog en lugar de un Builder | ||
+ | <source lang=java> | ||
+ | public void clickProgressDialog(View v){ | ||
+ | final ProgressDialog barraProgreso = ProgressDialog.show(this, "Haciendo algo","Espere que termine",true); | ||
+ | new Thread(new Runnable(){ | ||
+ | public void run(){ | ||
+ | try{ | ||
+ | Thread.sleep(5000); | ||
+ | barraProgreso.dismiss(); | ||
+ | }catch (InterruptedException e){ | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | }).start(); | ||
+ | } | ||
+ | </source> | ||
+ | *Lo peculiar de este método es que creamos un thread | ||
+ | *Un thread o hilo es una línea de ejecución independiente de la ejecución de la aplicación que la invoca. | ||
+ | ===Otra barra de tarea=== | ||
+ | <source lang=java> | ||
+ | case 2: | ||
+ | |||
+ | barraSofisticadaDialogo = new ProgressDialog(this); | ||
+ | barraSofisticadaDialogo.setIcon(R.drawable.ic_launcher); | ||
+ | barraSofisticadaDialogo.setTitle("Hanciendo algo, no molesten!!"); | ||
+ | barraSofisticadaDialogo.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); | ||
+ | barraSofisticadaDialogo.setButton(DialogInterface.BUTTON_POSITIVE,"OK", | ||
+ | new DialogInterface.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(DialogInterface dialog, int which) { | ||
+ | // TODO Auto-generated method stub | ||
+ | Toast.makeText(getBaseContext(), "Ok cliqueado",Toast.LENGTH_SHORT).show(); } | ||
+ | }); | ||
+ | return barraSofisticadaDialogo; | ||
+ | </source> | ||
+ | <math>Escribir la fórmula aquí</math> |
Revisión de 04:17 21 oct 2013
Concepto de cajas de dialogo
- Son widgets que contienen informción para el usuario
- La información se presenta en una ventana aparte de la aplicación
- La ventana puede tener botones para que el usuario interactúe
- Puede pedir información o simplemente aceptar o confirmar algo
- Iremos presentando las diferentes opciones que se plantean
Métodos para presentar los diálogos
- Existen dos métodos
- Basado en versiones anteriores
- los diálogos los gestiona la clases activity desde una pila
- Los diálogos no se comparten entre actividades
- Muchos métodos utilizados están obsoletos
- Es el más fácil de implementar
- Basado en fragmentos
- Usados desde el API 11 (Android 3.0)
- Puede funcionar con versiones anteriores si usamos el paquete de soporte Android
- Los diálogos los gestiona FragmentManager android.app.FragmentManager
- Los diálogos son un tipo especial de fragmento
Tipos de diálogo
- Dialog
- AlertDialog
- CharacterPickerDialog
- DatePickerDialog
- ProgressDialog
- TimePickerDialog
- Dialogo personalizado
- Toast
Modificando la interfaz
- Añadimos un botón
- Referencia
http://developer.android.com/reference/android/widget/Button.html
- Los elementos gráficos los podemos añadir de dos maneras
- En el fichero java directamente
- En el fichero xml que descrive el layout de la ventana donde queremos que aparezcan
- Lo haremos en el fichero xml por simplicidad
- La idea es que al hacer click salga un mensaje emergente
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mensaje Toast" android:onClick="clickToast"/>
- Entre los atributos vemos que está onClick
- Este atributo especifica el nombre del método que se va a ejecutar cuando ocurra la acción
- En el código ese método recibirá la vista de este layout como parámetro
El fichero java
- Escribimos el código para que aparezca el mensaje
- Básicamente lo que haremos es escribir el código de este método clickToast
- Este método recibe como argumento la vista donde está el botón ç
- En él instanciaremos un objeto de la clase Toast
Clase Toast
clase definida en el paquete widgwt
android.widget.Toast
- Referencia
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
- Esta clase implementa la ventana mas sencilla de diálogo
- Es simplemente un alert o MsgBox con un solo parámetro,
- El parámetro es el texto que visualiza
- Se visualiza independientemente del activity de la aplicación
- Por lo que no oculta la activity que sigue visible y activa
- El mensaje generado por Toast desaparece cuando se cumple un timeout
- Un objeto de la clase Toast se puede instanciar con un método estático makeText de la misma clase
makeText(contexto, texto, duracion)
Este métod recibe tres parámetros
- contexto
- Objeto que describe el en entorno actual de la interfaz de la aplicación
- texto
- La cadena de caracteres que se va a visualizar
- duración
- tiempo en el que dura la ventana emergente
- puede tomar dos valores como constantes de la propia clase
LENGTH_LONG LENGTH_SHORT
El método que añadimos es el siguiente
public void clickToast(View v){ Context contesto = getApplicationContext(); CharSequence texto = "Este ejemplo ha funcionado FACIL!!!!"; int duracion = Toast.LENGTH_LONG; Toast mensaje = Toast.makeText(contesto, texto, duracion); mensaje.show(); }
Ventana dialogo con ckeckbox
- A continución realizaremos otra ventana de diálogo
- Seguimos usando el mismo proyecto
- En ella el usuario debe checkear distintas opciones (seleccionar idiomas)
- En la misma confirmaremos o cancelaremos la selección
Realización de la práctica
- Modificamos el interfaz
<Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Opciones Lengaje" android:onClick="clickMesajeOpciones"/>
- Definimos un array de opciones
CharSequence[] idiomas={"Españlo","Inglés","Alemán"}; boolean [] idiomasSeleccionados=new boolean[idiomas.length];
public void clickDialogoOpciones(View v){ showDialog(0); }
- El uso del método showDialog esta depreciado a partir de la versión 3.0 de android.
- El argumento indica un determinado cuadro de diálogo a mostrar
- implementamos el método clickMesajeOpciones
- Este método lo que hace es llamar al método onCreateDialog() que hay que sobreescribir
- Retorna un objeto Dialog que hay que importar de la clase import android.app.Dialog;
- Para mostrar el código debemos implementar el método onCreateDialog(int)
- Para crear un cuadro de diálogo utiliza el constructur Buider de la clase AlertDialog
- Se establecen las propiedades como icono, título, botones, casillas de verificación, ...
- se invoca al método create del objeto builder
Builder ventanaDialogo = new AlertDialog.Builder(this); ventanaDialogo.setIcon(R.drawable.ic_launcher); ventanaDialogo.setTitle("Ejemplo de cuadro diálogo 1 con texto" ); ventanaDialogo.setPositiveButton("SI", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Context contesto = getBaseContext(); int duracion=Toast.LENGTH_LONG; Toast.makeText(contesto,"OK seleccionado",duracion).show(); } });
Barra de progreso
- En este caso usaremos un objeto ProgressDialog en lugar de un Builder
public void clickProgressDialog(View v){ final ProgressDialog barraProgreso = ProgressDialog.show(this, "Haciendo algo","Espere que termine",true); new Thread(new Runnable(){ public void run(){ try{ Thread.sleep(5000); barraProgreso.dismiss(); }catch (InterruptedException e){ e.printStackTrace(); } } }).start(); }
- Lo peculiar de este método es que creamos un thread
- Un thread o hilo es una línea de ejecución independiente de la ejecución de la aplicación que la invoca.
Otra barra de tarea
case 2: barraSofisticadaDialogo = new ProgressDialog(this); barraSofisticadaDialogo.setIcon(R.drawable.ic_launcher); barraSofisticadaDialogo.setTitle("Hanciendo algo, no molesten!!"); barraSofisticadaDialogo.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); barraSofisticadaDialogo.setButton(DialogInterface.BUTTON_POSITIVE,"OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(getBaseContext(), "Ok cliqueado",Toast.LENGTH_SHORT).show(); } }); return barraSofisticadaDialogo;
[math]Escribir la fórmula aquí[/math]