Parte 3 Recursos, menús y diálogos

Recursos, menús y diálogos

Recursos

Pieza clave en Android

  • Permite su gestión de forma cómoda y eficiente
  • Contextualizados a las características del dispositivo y preferencias del usuario
    • Idioma
    • Tamaño de pantalla
    • Botones disponibles
  • Variable R
    • Autogenerada
    • Reúne todos los identificadores
    • Permite identificar a todos los recursos
  • AssetsManager
    • Acceso directo al recurso
    • Permite obtener un stream de bytes

Estructura de la variable R

  • R.color.*
  • R.string.*
  • R.dimen.*
  • R.drawable.*
  • R.amin.*
  • R.menu.*
  • R.layout.*
  • R.styleable.*
  • R.style.*
  • R.xml.*
  • R.raw.*

Tipos de recursos

  • Anims
    • Animaciones
    • /res/anim
  • Drawable
    • Imágenes, Shapes…
    • /res/drawable
  • Layout, Menús
    • Definiciones de UI, vistas y menús
    • /res/layout
    • /res/menú
  • Values
    • Colores, dimensiones, literales, estilos…
    • /res/values
  • Xml
    • Xml arbitrarios compilados, def. de búsquedas…
    • /res/xml
  • Raw
    • recursos no compilados
    • /res/raw: genera identificador en la variable R
    • /assets: no genera identificador, permite cualquier profundidad de directorios (AssetsManager)

Sintaxis de referencia

  • @[package:]type/name
  • [package:][type/]name Rerefencia al tema actual
  • Package
    • Paquete donde reside
    • Opcional si está definido en nuestra aplicación android paquete del sistema
  • Type
    • id, color, dimen, drawable, anim, layout, string, attr, xml, style
  • Gestión de identificadores
    • @id/text @+id/text
    • Crea el identificador
    • R.id.text
    • Lo usa para el elemento actual

Funcionamiento

Misma raíz de nombre de la carpeta

  • Indicación de la configuración separada por guiones

    drawable/

    drawable-es/

    drawable-es-rES/

    drawable-en-rUS-finger/

Funcionamiento (II)

  • Valores por defecto (carpeta sin indicadores)
  • Algoritmo de selección:

O si el calificativo es la densidad de la pantalla, Android selecciona el “mejor” en este punto, y se completa el proceso.

Menú, submenú y menú contextual

  • Permiten exponer funcionalidad sin sacrificar espacio en pantalla
  • Dos tipos
    • Asociados a actividad (Options Menu)
    • Se activan cuando el usuario presiona el botón hardware Menu
  • Contextuales (Context Menu)
    • Se asignan a cualquier vista
    • Se muestra cuando el usuario mantiene pulsado el D-pad, el trackball o pulsa sobre la vista 3 seg.

Menú en tres pasos

  • Icon Menu
    • Las primeras 6 acciones
    • Si más de 6, botón Más

Expanded Menu

  • Muestra el resto de acciones
    • Scrollable
    • No muestra iconos

Menú en tres pasos

  • Submenu
    • Muestra acciones anidadas
    • No muestra iconos

Definición

<?xml
version=“1.0”
encoding=“UTF-8”?>

<menu
xmlns:android=http://schemas.android.com/apk/res/android&#8221;>

    <item
android:id=“@+id/options”
android:title=“@string/options”
/>

    <item
android:id=“@+id/help”
android:title=“@string/help”>

        <menu>

            <item
android:title=“Sub_1”
/>

            <item
android:title=“Sub_2”
/>

            <item
android:title=“Sub_3”
/>

        </menu>

    </item>

</menu>

Asociación a actividad

    public
boolean onCreateOptionsMenu(Menu menu) {

        this.getMenuInflater().inflate(R.menu.main_menu, menu);

        return
true;

        }

    

    public
boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

        case
R.id.options: Intent intent = new
Intent(“org.helloworld.Intents.Action.OPTIONS”);

        startActivity(intent);

        return
true;

        default: return
super.onOptionsItemSelected(item);

        }

    }

Asociación a vista

view.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

        public
void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)

        { Helloworld.this.getMenuInflater().inflate(R.menu.main_menu, menu);

        // Alternativa a sobrescribir onContextItemSelected()

        // en la actividad

        menu.findItem(R.id.options).setOnMenuItemClickListener();}

        });

     }

    }

Diálogos

  • Se muestra sobre una actividad
    • Oscurece la actividad y puede ser parcialmente transparente
  • Permite:
    • Responder Si o No
    • Seleccionar uno o varios elementos de una lista
    • Ver el progreso de una aplicación
  • Asíncronos
  • Pueden ser manejados por la actividad
    • Reutilización, gestión de menú, volúmen,…
  • Predefinidos
    • AlertDialog
    • CharacterPickerDialog*
    • DatePickerDialog
    • ProgressDialog
    • TimePickerDialog

Métodos a sobrescribir en la actividad

  • onCreateDialog()
    • Creamos los distintos diálogos
  • onPrepareDialog()
    • Operaciones necesarias entre utilizaciones

Operar con un diálogo

  • showDialog()
    • Pasamos el identificador del dialogo a mostrar
  • dismissDialog()
    • Cerramos un dialogo
    • Igual que si se llama a dismiss() del diálogo
    • Se guarda el estado del diálogo
  • removeDialog()
    • Elimina cualquier referencia al diálogo
    • Hace un dismiss si es estaba mostrando

Creando un diálogo

    static
final
int
DIALOG_EXIT_ID = 0;

    protected
Dialog onCreateDialog(int id) {

        Dialog dialog; switch(id) {

        case
DIALOG_EXIT_ID:

            // TODO: Crear el diálogo

            break;

            default: dialog = null; }

        return dialog; }

        

        showDialog(DIALOG_EXIT_ID); …

        }}

Creando un diálogo (AlertDialog)

Mensaje con respueta positiva/negativa

    AlertDialog.Builder builder = new
AlertDialog.Builder(this);

    builder.setMessage(“¿Está seguro que quiere salir?”)

    .setCancelable(false).setPositiveButton(“Sí”, new
DialogInterface.OnClickListener() {

        public
void onClick(DialogInterface dialog, int id) { MyActivity.this.finish();

        } }).setNegativeButton(“No”, new
DialogInterface.OnClickListener()

        {

        public
void onClick(DialogInterface dialog, int id) {

            dialog.cancel(); } });

    dialog = builder.create()

Selección de una lista final

CharSequence[] items = {“Rojo”, “Verde”, “Azul”};

    AlertDialog.Builder builder = new
AlertDialog.Builder(this);

    builder.setTitle(“Selecciona un color”);

    builder.setItems(items, new
DialogInterface.OnClickListener() {

        

        public
void onClick(DialogInterface dialog, int item) {

            MyActivity.this.setDummyColor(items[item]); } });

    dialog = builder.create();

ProgressDialog dialog = ProgressDialog.show(MyActivity.this, “”, “Loading. Please wait…”, true);

Notificaciones

  • Características
    • Un icono
    • Un ticker y un titulo expandido
  • Se puede personalizar con una vista propia
    • Una intención
  • Lanzada cuando el usuario la selecciona
    • Opcionales
    • Sonido, vibración, LED,…
  • Servicio NotificationManager
  • Clase Notification
    • Se configura la notificación
    • Es posible lanzarla más de una vez
    • En cada lanzamiento se puede identificar de forma particular
    • Otras características
    • AUTO_CANCEL, INSISTENT, ONGOING_EVENT, NO_CLEAR

Ejemplo

    NotificationManager manager = (NotificationManager)

        getSystemService(Service.NOTIFICATION_SERVICE);

    int icon = android.R.drawable.stat_notify_voicemail;

    String tickerText = “Nuevo correo”;

    Context context = getApplicationContext();

    String contentTitle = “Tienes nuevo correo”;

    String contentText = “Buenos días…”;

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new
Intent(this, MyOtherActivity.class), 0);

        Notification notification = new
Notification(icon, tickerText, System.currentTimeMillis());

        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

        manager.notify(1, notification);

Toasts

  • Notificaciones cortas
    • Cortas en tiempo y espacio
    • Texto, aunque podemos asignar una vista
  • Se debe ejecutar en un hilo de UI
  • No son modales
    • Independiente de la aplicación que se está ejecutando
    • Permite a un servicio notificar al usuario sin interrumpirlo

Ejemplo

Context context = getApplicationContext();

    String msg = “Fotografía subida con éxito”;

    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, msg, duration);

    toast.show();

    

Anuncios
Minientrada | Esta entrada fue publicada en Android. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s