Diferencia entre revisiones de «Usuario:ManuelRomero/Android2/PrimerPrograma/Dialogo»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con ' ===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…')
 
(Página reemplazada por '{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}')
 
(16 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
+
{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}
===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 03:38 21 oct 2013