Bienvenidos sean a este post, hoy hablaremos sobre dos metodos de notificacion que hemos visto en algunas de nuestras apps creadas de nuestros posts, las mismas sirven para mostrar una notificacion de forma temporal o de forma permanente, las utilidades de este tipo de notificacion son para saber si en alguna accion del programa esta funcionando correctamente ya sea por un mensaje, mostrar un valor o devolver una confirmacion de hecho correctamente o error, comencemos con el primer metodo.

Anuncios

Toast

Es la forma mas simple de mostrar un mensaje en pantalla, el cual consiste en mostrar de forma temporal, mas largo o mas corto, un mensaje en pantalla que desaparecera solo, usualmente actuan ante eventos de un elemento, por ejemplo el click, a diferencia de los metodos de notificacion de otros lenguajes estos no pueden ser utilizados en cualquier parte del programa sino en algunas secciones, especialmente en eventos pero no en acciones de llamar a un servicio, por ejemplo, una buena funcion es para reemplazar una accion, en un post vimos un caso donde nosotros simulabamos contactarnos a un servicio de video streaming y si bien este no existia nosotros emulabamos esa conexion informando por un Toast que se habia conectado, la clase que nos permite utilizarla es:

import android.widget.Toast;

Su sintaxis es:

Toast.makeText(contexto, texto, duracion).show();

En este caso tiene un solo metodo llamado makeText() el cual se encargara de generar el texto en pantalla, primero deberemos definir el contexto, en general puede ser solamente this pero en algunas ocasiones necesitaremos decir cual va a ser la clase de contexto (p.e. MainActivity.this), luego ira el texto a mostrar en el cuadro, por ultimo definiremos el tiempo que se mostrara, esto se hace por dos medios:

Toast.LENGTH_SHORT
Toast.LENGTH_LONG

El primero sera un tiempo corto y el otro un tiempo largo, por ultimo el metodo show() sera el encargado de mostrar el resultado de lo generado anteriormente en pantalla.

Anuncios

SnackBar

A diferencia del metodo anterior este metodo de notificacion es un poco mas complejo pero nos permite mas acciones, por ejemplo notificar al usuario que necesita un permiso y darle la opcion de pulsar Ok para concederlo o no, y en base a eso tambien nos permite redireccionar, al igual que en el caso anterior no se puede implementar en cualquier momento del programa pero si para algunos eventos y no solamente como notificacion sino ademas con opcion para tomar decisiones, esta notificacion siempre va a estar en el fondo de la pantalla, tambien se representa sobre una barra de accion flotante, esto complica un poco mas pero no mucho, y solo se puede mostrar uno por vez. El paquete que controla a SnackBar es:

import android.support.design.widget.Snackbar;

Al igual que en Toast, podemos definir el tiempo que se mostrara en pantalla las tres posibilidades son:

LENGTH_INDEFINITE
LENGTH_SHORT
LENGTH_LONG

El primero mantendra el mensaje en pantalla por tiempo indeterminado, el segundo lo mostrara un tiempo breve y el tercero un tiempo mas prolongado pero en los dos ultimos casos eliminara el mensaje despues de un tiempo.

Anuncios

Para entender un poco mas estos dos conceptos haremos un ejemplo para mostrar las dos notificaciones, creemos el siguiente proyecto en Android Studio:

  • Application Name: Notificaciones
  • Domain Company: example.org
  • Minimum SDK (Phone and Tablet): 14
  • Add an Activity: Basic Activity

Con este tipo de actividad nos aseguramos que entre los elementos que nos genere Android Studio sera una Float Action Bar la cual nos permitir mostrar al SnackBar, antes modifiquemos el archivo content_main.xml donde reemplazaremos el bloque de TextView por este:

    <Button
        android:id="@+id/boton_toast"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Mostrar mensaje en Toast" />

El codigo de content_main.xml quedara de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">


    <Button
        android:id="@+id/boton_toast"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Mostrar mensaje en Toast" />

</android.support.constraint.ConstraintLayout>

Pasemos a ver como se genero el codigo de MainActivity automaticamente:

Anuncios
package org.example.notificaciones;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Como pueden ver nos genero un metodo para cuando hagamos click sobre el icono de la barra flotante, en este caso se ve como un mail, pero ahora haremos algunas modificaciones, en el metodo onCreate() agregaremos este bloque:

Anuncios
Button botonToast = (Button) findViewById(R.id.boton_toast);
botonToast.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this,"Este es un mensaje de Toast",
                Toast.LENGTH_SHORT).show();
     }
  });

Este bloque primero nos creara un vinculo entre el elemento del layout y el codigo Java, la siguiente linea se encarga de crear un evento para este boton, el cual espera un click y en el momento de que ocurra generara un mensaje de tipo Toast, pueden ver como primero usamos el contexto, luego va el mensaje y por ultimo el tiempo que estara en pantalla, por ultimo show() se encargara de mostrarlo en pantalla.
Nuestra siguiente modificacion sera sobre este bloque:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }
});

Al cual lo reemplazaremos de la siguiente forma:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view, "Aca nuestra accion", Snackbar.LENGTH_INDEFINITE)
                .setAction("Ok", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this,
                                "Accion del SnackBar",Toast.LENGTH_SHORT).show();
                    }
                        }).show();
    }
});
Anuncios

En este caso modificaremos a SnackBar, el metodo make tendra los siguientes campos:

  1. Este sera la vista, en este caso view
  2. Este sera el texto a mostrar
  3. Este sera el tiempo que se mostrara el mensaje, en este caso infinito porque asi lo definimos

Nuestro siguiente metodo sera setAction el cual definira la accion relacionada con nuestra notificacion, esta tendra dos campos: el primero sera el mensaje a mostrar y el segundo a cual accion queremos relacionarlo, en este caso usamos a OnClickListener para esperar el evento click, despues en el siguiente metodo onClick utilizaremos un Toast para mostrar un mensaje, tal como lo explicamos antes, en este caso elegi un Toast para hacer mas rapido pero se puede usar mas acciones o actividades o lo que sea necesario, en este post vimos como podiamos usarlo para pedir permisos de acceso en MarshMallow (Android 6.0)

Una ultima modificacion, aunque esta puede ser opcional, seria modificar el icono de la barra flotante y para ello deben modificar la linea app:srcCompat del archivo activity_main.xml con la siguiente linea:

app:srcCompat="@android:drawable/ic_menu_preferences"

Esta ultima es opcional, es simplemente para cambiar el icono y a su vez pueden elegir otro, ahora con todas las modificaciones realizadas podemos probar la app como se ve en el siguiente video

En el video podemos ver los dos tipos de notificaciones en accion, tanto directamente con el Toast y un boton como por medio del SnackBar.

Anuncios

En resumen, hoy hemos visto como son las notificaciones, como trabajan, como algunas son mas complejas que otras, como pueden darnos la posibilidad de pequeñas notificaciones, como de notificaciones para relacionarla a alguna accion, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00