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

De WikiEducator
Saltar a: navegación, buscar
(Ventana dialogo con direfentes opciones)
(Página reemplazada por '{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}')
 
(Una revisión intermedia por el mismo usuario no mostrado)
Línea 1: Línea 1:
{{TEP}}
+
{{:Usuario:ManuelRomero/Android/PrimerContacto/nav}}
{{:Usuario:ManuelRomero/Android2/PrimerPrograma/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