CLASE 01

Material Design

Contenido

- Historia y Evolucion

- Esquema de Colores

- Toolbar

- Recycler View

- Card View

- Floating Action Button

 

- Navigation Drawer (del Wizard)

 

Historia

En los inicios de Android no había reglas a la hora de diseñar la interfaz y la experiencia de usuario. 

El primer marco de diseño que definieron fue Holo, introducio en Android 4.0. Desde ese momento ya no se era tan libre a la hora de diseñar una app, y la inteción dentrás era unificar la experiencia entre los distintos dispositivos móviles (tablets y celulares).

Material Design

Material Design es la guía de diseño para Android, introducida a partir de la versión 5.0 Lollipop (API Level 21). Es mucho más estricta y exigente que Holo, y sigue mantiendo su lineamiento minimalista que tanto caracteriza a Android y que agrada a los usuarios.

Y aquí se fue un poco más lejos, ya la intención no sólo era mantener la experiencia en dispositivos móviles sino también en los Navegadores y los dispositivos Weareables.

Material Design

Se pasó de una interfaz plana a un juego de sombras para crear la sensación de profundidad, en una interfaz basada en capas. Un botón debe sobresalir, para que invite a ser presionado.

También se apoyaron mucho en las animaciones para crear un aspecto más realista a la hora de interactura.

Evolución

Evolución

Evolución

Evolución

STYLING

Esquema de Colores

- Primary

- PrimaryDark

- Accent

Material Themes

TOOLBAR

TOOLBAR

Cuando se lanzó por primera vez la ActionBar, no tuvieron en cuenta la compatibilidad hacia atrás, con lo que reproducir este elemento en version de Android se volvió una tarea muy pesada, con librerías hechas por terceros.

Luego estandarizaron un poco el proceso, con la librerías de compatibilidad de Android; y a su vez la ActionBar fue ganando protagonismo y funcionalidad.

Ahora finalmente, decidieron lanzar la ToolBar, con el objetivo de generalizar todo en un único elemento, y además hacerla más versatil, ya que la podemos ubicar donde queramos, podemos animarla, y demás.

TOOLBAR

Si deseamos incorporar la Toolbar, debemos utilizar un theme que no tenga ActionBar, ya que sino tendríamos 2 barras: la ActionBar del Theme  y la Toolbar que agreguemos.


Para simplificar, vamos a usar un LinearLayout y vamos a agregar la Toolbar, de la siguiente manera

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:minHeight="?attr/actionBarSize"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</android.support.v7.widget.Toolbar>

TOOLBAR

Podemos capturar el funcionamiento del HOME button, ya que se trata de un item del menu de opciones o menu de acciones.

 

 

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    // Capturamos la accion del boton de HOME
    if (id == android.R.id.home){
        finish();
    }

    return super.onOptionsItemSelected(item);
}

RECYCLER VIEW

RECYCLER VIEW

Así como la Toolbar llegó para unificar las ActionBar y agregarle funcionalidades, el RecyclerView vino a unificar las ListView y GridView, independizándose de la organización de los elementos, y dejando esa tarea a un LayoutManager.

 

Además es mucho más eficiente en el uso de memoria y procesamiento, reciclando el layout que utiliza para cada renglón sin la necesidad de tener que llamar a findViewById en cada uno de ellos y en su lugar, utiliza un ViewHolder, que contiene la estructura de cada renglón.

RECYCLER VIEW

Antes de incorporar este elemento en nuestra app, debemos asegurarnos de que estemos usando las librerías de diseño que lo incorporan, o en su defecto, agregarla:

compile 'com.android.support:design:25.3.1'
El nro de versión, va a depender de las herramientas que estemos utilizando, y hay que tener en cuenta que todas las librerias de android que usemos deben tener exactamente el mismo número para evitar conflictos entre ellas

RECYCLER VIEW

1- Agregamos el RecyclerView en nuestro layout

<android.support.v7.widget.RecyclerView
    android:id="@+id/recylerview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

2- Tomamos una referencia al mismo desde la Actividad, y le decimos que vamos a organizar los elementos segun un Layout Lineal

 

recylerview = (RecyclerView) findViewById(R.id.recylerview);

LinearLayoutManager llm = new LinearLayoutManager(getApplicationContext());
recylerview.setLayoutManager(llm);

RECYCLER VIEW

Ahora, vamos a necesitar un Adaptador, para decirle como queremos mostrar los elementos dentro del mismo. (Lo mismo que hacemos si customizaramos un ListView).

Pero primeramente, necesitamos un Objeto que identifique a los elementos a mostrar. Supongamos que vamos a tener un listado de Películas. Asi que creemos ese objeto!

 

 

Cuando lo tengamos, pasemos a crear el Adaptador

RECYCLER VIEW

Para el Adaptador, vamos a necesitar un Layout que sea la "vista" de los datos. Llamemoslo recyclerview_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <!-- TITULO -->
    <TextView
        android:id="@+id/peliTitulo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- DESCRIPCION -->
    <TextView
        android:id="@+id/peliDescripcion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

RECYCLER VIEW

Después vamos a crear dentro de la Activity, una clase para representar al adaptador

class PelicuasListAdapter extends RecyclerView.Adapter<PelicuasListAdapter.PeliculaViewHolder> {

        List<Peliculas> peliculasList;

        PelicuasListAdapter(List<Peliculas> listado) {
            this.peliculasList = listado;
        }

        @Override
        public int getItemCount() {
            return peliculasList.size();
        }

        @Override
        public PeliculaViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recylclerview_item, viewGroup, false);
            PeliculaViewHolder vh = new PeliculaViewHolder(v);

            return vh;
        }
}

RECYCLER VIEW

Dentro de la clase Adapter, creamos al ViewHolder

public class PeliculaViewHolder extends RecyclerView.ViewHolder {
    private TextView peliTitulo;
    private TextView peliDescripcion;

    PeliculaViewHolder(View itemView) {
        super(itemView);
        peliTitulo = (TextView) itemView.findViewById(R.id.peliTitulo);
        peliDescripcion = (TextView) itemView.findViewById(R.id.peliDescripcion);
    }
}
@Override
public void onBindViewHolder(PeliculaViewHolder peliViewHolder, final int i) {
    peliViewHolder.peliTitulo.setText(peliculasList.get(i).titulo);
    peliViewHolder.peliDescripcion.setText(peliculasList.get(i).descripcion);
}

Por último, hacemos la adaptación propiamente dicha de los datos y su vista

RECYCLER VIEW

Creamos unas películas de prueba y veamoslo en funcionamiento

List<Peliculas> peliculas = new ArrayList<>();
peliculas.add(new Peliculas("Los Vengadores", "Superheroes de Marvel"));
peliculas.add(new Peliculas("Batman", "Heroe de Ciudad Gotica"));
peliculas.add(new Peliculas("SpiderMan", "El trepa muros"));

PelicuasListAdapter pelisAdapter= new PelicuasListAdapter(peliculas);

recylerview.setAdapter(pelisAdapter);

Vamos a notar que a este listado le falta un separador de lista, Hay varias formas de agregar uno, la mas sencilla es agregarla en el layout que define a cada renglón

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#000"/>

CARDVIEW VIEW

Ahora que tenemos nuestro listado ya completo y funcionando, podemos incorporar un elemento nuevo que realza el realismo de la aplicación y es más acorde a la estética moderna. Dicho elemento son las CardView, que como su nombre lo indica define a una Tarjeta.

Antes de hacerlo, tenemos que agregar la libreria y luego envolvemos el layout del item en una cardview

compile "com.android.support:cardview-v7:25.3.1"

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardUseCompatPadding="true"
    card_view:cardElevation="4dp"
    card_view:cardCornerRadius="3dp"
    android:foreground="?attr/selectableItemBackground">

FLOATING ACTION BUTTON

FAB

El FAB es un elemento nuevo, no es más que un botón, pero con la particularidad de dar la impresión de estar más arriba que los otros elementos del Layout (Material Design basado en CAPAS).

No es más que un simple botón cuya función debe ser la acción principal dentro de la pantalla en la que nos encontremos

USAR android.support.design.widget.CoordinatorLayout

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        android:src="@android:drawable/ic_menu_share"/>

Gracias!

No dejen de consultar cualquier duda que surja

sebasira@gmail.com

www.sebasira.com.ar

Android Experto - Clase 01

By Ing. Sebastian M. Irazabal

Android Experto - Clase 01

  • 750