Diferencia entre revisiones de «Usuario:ManuelRomero/Dialogo»

De WikiEducator
Saltar a: navegación, buscar
(Página blanqueada)
 
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>
 

Última revisión de 04:16 21 oct 2013