Diferencia entre revisiones de «Usuario:ManuelRomero/Android/PrimerosContactos/Dialogo»

De WikiEducator
Saltar a: navegación, buscar
(Página reemplazada por '{{:Usuario:ManuelRomero/Android/PrimerosContactos/nav}}')
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/Android/PrimerosContactos/nav}}
 
{{:Usuario:ManuelRomero/Android/PrimerosContactos/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>
 +
<math>Escribir la fórmula aquí</math>

Revisión de 04:17 21 oct 2013



  • 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
  1. Basado en versiones anteriores
    1. los diálogos los gestiona la clases activity desde una pila
    2. Los diálogos no se comparten entre actividades
    3. Muchos métodos utilizados están obsoletos
    4. Es el más fácil de implementar
  2. Basado en fragmentos
    1. Usados desde el API 11 (Android 3.0)
    2. Puede funcionar con versiones anteriores si usamos el paquete de soporte Android
    3. Los diálogos los gestiona FragmentManager android.app.FragmentManager
    4. Los diálogos son un tipo especial de fragmento

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
  1. En el fichero java directamente
  2. 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
 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mensaje Toast" 
        android:onClick="clickToast"/>
  • 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
  • Un objeto de la clase Toast se puede instanciar con un método estático makeText de la misma clase
 makeText(contexto, texto, duracion)

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

    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();
    }

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
  <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Opciones Lengaje" 
        android:onClick="clickMesajeOpciones"/>
  • Definimos un array de opciones
 	CharSequence[] idiomas={"Españlo","Inglés","Alemán"};
    	boolean [] idiomasSeleccionados=new boolean[idiomas.length];
    public void clickDialogoOpciones(View v){
    showDialog(0);
}
  • 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
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();
	   }
	});

Barra de progreso

  • En este caso usaremos un objeto ProgressDialog en lugar de un Builder
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();
	}
  • 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

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;

[math]Escribir la fórmula aquí[/math]