lunes, 13 de octubre de 2014

Mensajes emergentes

Utilizaremos un mensaje emergente Toast para informar brevemente al usuario sobre el estado de una determinada operación. Por ejemplo, cuando creamos un nuevo correo electrónico y lo abandonamos sin haberlo enviado, el sistema nos mostrará un mensaje emergente en el que se nos comunica que será guardado como borrador y que podremos recuperarlo con posterioridad. Los mensajes de este tipo se muestran durante un breve espacio de tiempo.


Si por alguna razón necesitamos que el usuario sea capaz de realizar algún tipo de acción adicional como respuesta al mensaje, utilizaremos una notificación Notify en su lugar.

Funcionamiento básico.

Para crear un objeto de tipo Toast utilizaremos el método estático makeText(). Este método consta de tres argumentos: el contexto de la aplicación, un texto con el mensaje y la duración del mensaje. El método devuelve un objeto de tipo Toast. Para mostrar el mensaje utilizaremos el método show() del objeto devuelto. Por ejemplo:
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();
Si queremos mostrar el mensaje en una sola línea de código sin tener que definir una variable intermedia:
Toast.makeText(context, text, duration).show();

Cambiando la posición.

La posición por defecto en la que aparece un mensaje emergente es en la parte inferior de la pantalla y centrado horizontalmente. Para cambiar la posición del mensaje usaremos el método setGravity(int, int, int). El método consta de tres argumentos: una constante de la clase Gravity, un desplazamiento sobre la coordenada X y un desplazamiento sobre la coordenada Y.

Por ejemplo, si lo que queremos es mostrar un mensaje en la parte superior izquierda, utilizaremos la siguiente sentencia:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Si queremos desplazar el mensaje horizontalmente o verticalmente, utilizaremos el segundo y tercer argumentos respectivamente.

Personalizando los mensajes.

Podemos crear nuestra propia plantilla para cambiar el aspecto por defecto de los mensajes emergentes. Para ello, definiremos el recurso de tipo plantilla asociado y lo utilizaremos como argumento del método setView() del mensaje.

Por ejemplo, supongamos que el aspecto de nuestros mensajes va a ser el siguiente:

res/layout/toas_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/toast_layout_root"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="8dp"
              android:background="#DAAA"
              >
    <ImageView android:src="@drawable/droid"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginRight="8dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="#FFF"
              />
</LinearLayout>
Desde nuestro código cargaremos la plantilla a través de su identificador toast_layout_root:
LayoutInflater inflater = getLayoutInflater();

// Cargamos nuestra plantilla personalizada.
// Especificamos como segundo argumento la vista de grupo que queremos cargar.
// En este caso cargamos el elemento raíz de nuestro plantilla.
View layout = inflater.inflate(R.layout.custom_toast,
                               (ViewGroup) findViewById(R.id.toast_layout_root));

// Asignamos el mensaje que será mostrado.
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");

// Creamos el mensaje emergente y lo mostramos:
// -- Lo posicionamos centrado verticalmente sin desplazamientos adicionales.
// -- Lo mostramos durante un período de tiempo LENGTH_LONG.
// -- Le asignamos la plantilla layout previamente cargada.
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Nota. Utilizaremos el constructor de la clase Toast solo cuando vayamos a personalizar los mensajes emergentes utilizando el método setView(View). Si no vamos a personalizar nuestros mensajes, los crearemos con el método estático makeText(Context, int, int).

No hay comentarios:

Publicar un comentario