|
|
Línea 1: |
Línea 1: |
− | {{:Usuario:ManuelRomero/Android/PrimerContacto/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>
| |