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

De WikiEducator
Saltar a: navegación, buscar
(Página reemplazada por '{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}')
 
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}
 
{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}
<br>
 
===Dialog con 2 o 3 botones===
 
<br/>
 
{{Actividad|
 
#Primero añadimos un botón para que realice esta acción
 
#Le asignamos en el atributo onClick en nombre de la función
 
#implementamos la función
 
}}
 
 
<source lang=xml>
 
<Button
 
        android:id="@+id/btnDialogo1"
 
        android:text="Dialogo1"
 
        android:layout_width="wrap_content"
 
        android:layout_height="wrap_content"
 
        android:onClick="clickDialogo1" />
 
</source>
 
===El código ===
 
*Una caja de diálog es un objeto de la clase '''AlertDialog'''
 
*Para configurar las propiedades de la caja de diálogo usamos un objeto que devuelve el método estático '''''AlertDialog.Builder(Context );
 
*El procedimiento para crear/usar cajas de diálogos es el siguiente
 
#creo un objeto para las propiedades de la caja de diálogo ''AlerDialog.Builder''
 
#creo la caja de diálogo  AlertDialog a partir de objeto anterior
 
#Muestro la caja de diálogo
 
<source lang=java>
 
AlertDialog.Builder caja = new AlertDialog.Builder(this);7
 
caja.setTitle("Titulo");
 
    .setIcon("icono.png");
 
  ......
 
AlertDialog dialogo = caja.create();
 
dialogo.show();
 
</source>
 
*Realizamos el código
 
*Observar que para dar las diferentes propiedades puedo hacerlo seguido
 
objeto.propiedad1()
 
      .propiedad2()
 
      ....
 
      .propiedadn();
 
*Una vez creado el objeto le damos las propiedades que necesarias
 
*Los métodos que asignas propiedades son muy intuitivos, y permiten asignar
 
#Un título setTitle
 
#Un mensaje de texto
 
#Uno, dos o tres botones
 
#Una lista de items seleccionables (con casillas de verificación (checkboxes) o botones de opción (radio buttons) opcionales)
 
#El método setCancelable(boolean) convierte la ventana de dialogo en modal respecto al botón de retroceso
 
 
Vermos el código
 
<source lang=java>
 
  public void clickDialogo1(View v){
 
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
 
  builder.setMessage("¿Desea continuar con la transferencia de dinero?")
 
          .setTitle("Advertencia")
 
          .setCancelable(false)
 
          .setNegativeButton("Cancelar",
 
                  new DialogInterface.OnClickListener() {
 
                      public void onClick(DialogInterface dialog, int id) {
 
                          dialog.cancel();
 
                      }
 
                  })
 
          .setPositiveButton("Continuar",
 
                  new DialogInterface.OnClickListener() {
 
                      public void onClick(DialogInterface dialog, int id) {
 
                          msgOK(); // metodo que se debe implementar
 
                      }
 
                  });
 
  AlertDialog alert = builder.create();
 
  alert.show();
 
  }
 
 
private void msgOK(){
 
        Toast t = Toast.makeText(getApplicationContext(), "Has presionado ok", Toast.LENGTH_SHORT);
 
        t.show();
 
}
 
</source>
 
*Conviene revisar el método para añadir botones
 
*Tenemos tres métodos para este cometido
 
setPositiveButton
 
setNegativeButton
 
setNeutralButton
 
*Estos métodos tienen dos parámetros el texto y el listener
 
*Se suele pasar una instancia del listener creandola en el propio parámetros
 
*Si quiere usar variables de la clase, éstas tienen que ser constantes
 
 
{{Actividad|Se puede añadir otro botón a la caja de diálogo anterior}}
 
 
===checkButton como opciones===
 
*Tenemos diferentes opciones y queremos seleccionar  algunas de ellas
 
*En ella el usuario debe checkear distintas opciones (seleccionar idiomas)
 
*En este caso debemos invocar al método '''''setMultiChoiceItems'''''
 
*Este método le pasamos el vector de opciones, un vector de boolenos que nos dice cada opción si está  o no seleccionada y un listener.
 
*Igualmente podemos añadir botones de aceptar o cancelar.
 
<source lang=xml>
 
  <Button
 
        android:id="@+id/Dialog4"
 
        android:text="Idiomas"
 
        android:layout_width="wrap_content"
 
        android:layout_height="wrap_content"
 
        android:onClick="clickOpcionMultiple" />
 
</source>
 
<source lang=java>
 
public void clickOpcionMultiple(View v){
 
 
 
AlertDialog.Builder caja = new AlertDialog.Builder(this);
 
 
caja.setTitle("Tu OS móvil preferido?")
 
    .setMultiChoiceItems(idiomas,idiomasSeleccionados,
 
                          new DialogInterface.OnMultiChoiceClickListener() {
 
                  @Override
 
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
 
// TODO Auto-generated method stub
 
                      Context contesto = getBaseContext();
 
                      int duracion=Toast.LENGTH_SHORT;
 
                      Toast.makeText(contesto,idiomas[which]+(isChecked ? "seleccionado":"NOOOOOO seleccionado"),duracion).show();
 
                              }
 
                  });
 
 
AlertDialog alert = caja.create();
 
alert.show();
 
}
 
}
 
 
 
</source>
 
===ratioButton ===
 
*Tenemos diferentes opciones y queremos seleccionar  solo una
 
*En este caso usaremos el método setSingleChoiceItems(charSequence[] lista,int item_seleccionado,listener)
 
<source lang=xml>
 
<Button
 
        android:id="@+id/Dialog3"
 
        android:text="Sexo"
 
        android:layout_width="wrap_content"
 
        android:layout_height="wrap_content"
 
        android:onClick="clickSingle" />
 
</source>
 
 
<source lang=java>
 
public void clickSingle(View v){
 
 
 
AlertDialog.Builder caja = new AlertDialog.Builder(this);
 
caja.setTitle("Tu OS móvil preferido?")
 
    .setSingleChoiceItems(sexo, -1, new DialogInterface.OnClickListener() {
 
    public void onClick(DialogInterface dialog, int item) {
 
        Toast toast = Toast.makeText(getApplicationContext(), "Haz elegido la opcion: " + sexo[item] , Toast.LENGTH_SHORT);
 
        toast.show();
 
        dialog.cancel();
 
    }
 
    });
 
AlertDialog alert = caja.create();
 
alert.show();
 
}
 
 
</source>
 
===Ventana dialogo con direfentes opciones===
 
*En este caso añadimos el método setItems, en lugar de setMessage
 
*El método setItems como primer parámetro le pasaremos un vector de charSequences y el segundo es un listener
 
*Vemos el código
 
<source lang=xml>
 
  <Button
 
        android:id="@+id/btnOpciones"
 
        android:text="Opciones"
 
        android:layout_width="wrap_content"
 
        android:layout_height="wrap_content"
 
        android:onClick="clickMsgOpciones" />
 
</source>
 
<source lang=java>
 
public void clickMsgOpciones(View v){
 
   
 
      AlertDialog.Builder caja = new AlertDialog.Builder(this);
 
      caja.setTitle("Indica sexo")
 
          .setPositiveButton("Continuar",
 
              new DialogInterface.OnClickListener() {
 
                  public void onClick(DialogInterface dialog, int id) {
 
                      msgOK(); // metodo que se debe implementar
 
                  }
 
              })
 
          .setItems(sexo, new DialogInterface.OnClickListener() {
 
@Override
 
      public void onClick(DialogInterface dialog, int elemento) {
 
// TODO Auto-generated method stub
 
      Toast t = Toast.makeText(getApplicationContext(), "Has seleccionado "+sexo[elemento],Toast.LENGTH_LONG);
 
      t.show();
 
      dialog.cancel();
 
      }
 
});
 
 
AlertDialog alert = caja.create();
 
alert.show();
 
}
 
</source>
 
===Barra de progreso circular===
 
*En este caso la barra de progreso puede ser circular u horizontal
 
*Este tipo de barra de progreso se ha de actualizar
 
*Si queremos que se ejecute de forma independiente del proceso debemo crear un hilo de ejecución
 
*En este caso creamos un objeto de la clase '''''ProgressDialog'''''
 
<source lang=xml>
 
    <Button
 
        android:id="@+id/ProgressDialog"
 
        android:text="Progress Circulo"
 
        android:layout_width="wrap_content"
 
        android:layout_height="wrap_content"
 
        android:onClick="clickProgressCirculo" />
 
</source>
 
*En este caso simplemente
 
#creamos el objeto ProgressDialog
 
#Lo visualizamos
 
#Creamos un thread que espere 5 segundos
 
#cerramos la barra de diálogo con dismiss()
 
<sourece lang=java>
 
public void clickProgressCirculo(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>
 
 
===Barra de progreso horizontal===
 
*Ahora le diremos que el objeto que tiene la forma horizontal de línea
 
*En este caso tenemos una barra que se va rellenando
 
*Esto implica que el progreso tendrá un valor inicial e irá modificando hasta llegar a estar totalmente rellena
 
*Vamos a añadir un botón para cancelar
 
<source lang=xml>
 
<Button
 
        android:id="@+id/ProgressDialog2"
 
        android:text="Progress Dialog 2"
 
        android:layout_width="wrap_content"
 
        android:layout_height="wrap_content"
 
        android:onClick="clickProgressHorizontal" />
 
</source>
 
<source lang=java>
 
public void clickProgressHorizontal(View v){
 
 
Toast t=Toast.makeText(getApplicationContext(),"hola",Toast.LENGTH_LONG);
 
final ProgressDialog barraSofisticadaDialogo = new ProgressDialog(this);
 
t.show();
 
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(); }
 
  }
 
);
 
barraSofisticadaDialogo.setProgress(0);
 
barraSofisticadaDialogo.show();
 
Log.d("BARRASOFISTICADA","Antes del Runnable");
 
new Thread(new Runnable(){
 
public void run(){
 
for (int i=1;i<=15;i++){
 
try{
 
Log.d("BARRASOFISTICADA","dentro del Runnable");
 
Thread.sleep(100);
 
barraSofisticadaDialogo.incrementProgressBy((int)(100/15));
 
 
}catch (InterruptedException e){
 
e.printStackTrace();
 
}
 
}//End for
 
barraSofisticadaDialogo.dismiss();
 
Log.d("BARRASOFISTICADA","terminado el  bucle");
 
 
}
 
}).start();
 
Log.d("BARRASOFISTICADA","terminado el  Runnable");
 
 
</source>
 

Última revisión de 02:38 21 oct 2013