Éste blog es un agregador de posts de otros blogs que, por su temática, son de alto interés para los lectores de HijoDeBlog. Cada enlace redirige al autor original del post. Contacta con info _at_ hijodeblog _dot_ com para cualquier duda.

Entorno de desarrollo Android (Android Studio)  

El ritmo de actualizaciones de Android Studio es bastante alto, por lo que algunos detalles de este artículo pueden no ajustarse exactamente a la última versión de la aplicación. Este artículo se encuentra actualizado para la versión de Android Studio 1.0.2

Para empezar con este Curso de Programación Android, vamos a describir los pasos básicos para disponer en nuestro PC del entorno y las herramientas necesarias para comenzar a programar aplicaciones para la plataforma Android.

No voy a ser exhaustivo, ya que existen muy buenos tutoriales sobre la instalación de Java, Android Studio y el SDK de Android, incluida la documentación oficial de la plataforma,  por lo que tan sólo enumeraré los pasos necesarios de instalación y configuración, y proporcionaré los enlaces a las distintas herramientas. Vamos allá.

Paso 1. Descarga e instalación de Java.

Si aún no tienes instalado ninguna versión del JDK (Java Development Kit) puedes descargarla desde la web de Oracle.

Aunque ya está disponible Java 8, para el desarrollo en Android nos seguiremos quedando por ahora con Java 7. En el momento de escribir este manual la reversión más reciente de esta serie es la versión 7 update 71, que deberemos descargar para nuestra versión concreta del sistema operativo. Por ejemplo, para Windows 64 bits descargaremos el ejecutable marcado como “Windows x64” cuyo nombre de fichero es “jdk-7u71-windows-x64.exe“.

descarga-java

La instalación no tiene ninguna dificultad, se trata de un instalador estándar de Windows donde tan sólo hay que aceptar, pantalla por pantalla, las opciones que ofrece por defecto.

El siguiente paso es opcional, pero puede evitarnos algún que otro problema en el futuro. Crearemos una nueva variable de entorno llamada JAVA_HOME y cuyo valor sea la ruta donde hemos instalado el JDK, por ejemplo “C:Program FilesJavajdk1.7.0_71“. Para añadir una variable de entorno del sistema en Windows podemos acceder al Panel de Control / Sistema y Seguridad / Sistema / Configuración avanzada del sistema / Opciones Avanzadas / Variables de entorno.

variable-entorno

Paso 2. Descarga e instalación de Android Studio y el SDK de Android.

Descargaremos Android Studio accediendo a la web de desarrolladores de Android, y dirigiéndonos a la sección dedicada al SDK de la plataforma. Descargaremos el instalador correspondiente a nuestro sistema operativo pulsando el botón verde “Download Android Studio” y aceptando en la pantalla siguiente los términos de la licencia.

descarga-as

Para instalar la aplicación ejecutamos el instalador descargado (en mi caso el fichero se llama “android-studio-bundle-135.1641136.exe“) y seguimos el asistente aceptando todas las opciones seleccionadas por defecto. Durante el proceso se instalará el SDK de Android, los componentes adicionales para el desarrollo sobre Android 5.0, un dispositivo virtual (o “AVD”, más adelante veremos lo que es esto) preconfigurado para dicha versión de Android, y por supuesto el entorno de desarrollo Android Studio.

instalar-as-2

Como puede verse en la imagen anterior, también se instalará y configurará durante la instalación (si tu PC es compatible) el llamado Intel Hardware Accelerated Execution Manager (o “HAXM”), que nos ayudará a mejorar el rendimiento del emulador de Android, más adelante hablaremos de esto. En un paso posterior del instalador se podrá indicar además la cantidad de memoria que reservaremos para este componente (se puede dejar seleccionada la opción por defecto):

instalar-as-6

Durante la instalación tendremos que indicar también las rutas donde queremos instalar tanto Android Studio como el SDK de Android. Para evitar posibles problemas futuros mi recomendación personal es seleccionar rutas que no contengan espacios en blanco.

instalar-as-5

Una vez finalizada la instalación se iniciará automáticamente Android Studio. Es posible que nos aparezca en este momento un cuadro de diálogo consultando si queremos reutilizar la configuración de alguna versión anterior del entorno. Para realizar una instalación limpia seleccionaremos la opción “I do not have a previous version…“.

inicio-as-2

Durante la primera ejecución aparecerá además el asistente de inicio que se encarga de descargar e instalar/actualizar algunos componentes importantes del SDK de Android (si existieran).

inicio-as-3

Paso 3. Actualización de Android Studio.

Este paso también es opcional, aunque recomendable. Tras finalizar el asistente de inicio nos aparecerá la pantalla de bienvenida de Android Studio:

inicio-as-5

Podemos comprobar si existe alguna actualización de Android Studio pulsando el enlace situado en la parte inferior de la pantalla de bienvenida (Check for updates now), lo que nos mostrará información sobre la última actualización disponible (si existe) y nos permitirá instalarla pulsando el botón “Update and restart“. En mi caso, estaba disponible como actualización la versión 1.0.2:

inicio-as-6

Tras la actualización, Android Studio se reiniciará y volveremos a aparecer en la pantalla de bienvenida.

Paso 4. Configuración inicial de Android Studio.

Lo siguiente que haremos antes de empezar a utilizar el IDE será asegurarnos de que están correctamente configuradas las rutas a los SDK de Java y Android.

Para ello pulsaremos la opción “Configure” de la pantalla de bienvenida, tras ésta accederemos a “Project Defaults” y después a “Project Structure”. En la ventana de opciones que aparece revisaremos el apartado “SDK Location” asegurándonos de que tenemos correctamente configuradas las rutas al JDK y al SDK de Android. A continuación muestro la configuración en mi caso, aunque puede variar según las rutas que hayáis utilizado para instalar los distintos componentes.

configurar-as-1

Tras la revisión pulsamos el botón OK para aceptar la configuración y volvemos al menú de la pantalla de bienvenida de Android Studio.

Paso 5. Instalar/actualizar componentes del SDK de Android.

El siguiente paso será actualizar algunos componentes del SDK de Android e instalar otros adicionales que nos pueden ser necesarios/útiles para el desarrollo de nuestras aplicaciones.

Para ello accederemos al menú “Configure / SDK Manager” de la pantalla de bienvenida, lo que nos permitirá acceder al SDK Manager de Android. Con esta herramienta podremos instalar, desinstalar, o actualizar todos los componentes disponibles como parte del SDK de Android.

sdk-manager-1

Los componentes principales que, como mínimo, deberemos instalar/actualizar serán los siguientes:

  1. Android SDK Tools
  2. Android SDK Platform-tools
  3. Android SDK Build-tools (por ahora la versión más reciente)
  4. Una o más versiones de la plataforma Android
  5. Android Support Repository (extras)
  6. Google Play Services (extras)
  7. Google Repository (extras)

El punto 4 es uno de los más importantes, ya que contiene los componentes y librerías necesarias para desarrollar sobre cada una de las versiones concretas de Android. Así, si queremos probar nuestras aplicaciones por ejemplo sobre Android 2.2 y 4.4 tendremos que descargar sus dos plataformas correspondientes. Mi consejo personal es siempre instalar al menos 2 plataformas: la correspondiente a la última versión disponible de Android, y la correspondiente a la mínima versión de Android que queremos que soporte nuestra aplicación, esto nos permitirá probar nuestras aplicaciones sobre ambas versiones para asegurarnos de que funciona correctamente. En este curso nos centraremos en las versiones 4.x y 5.x de Android. Intentaré que todo lo expuesto sea compatible al menos desde la versión 4.0.3 (API 15) en adelante, por lo que en nuestro caso instalaremos, además de la reciente versión 5.0 (API 21), alguna plataforma de la versión 4, por ejemplo la 4.4.2 (API 19).

A modo de referencia, en mi caso seleccionaré los siguientes componentes/versiones (algunos pueden estar ya instalados):

  1. Android SDK Tools (Rev. 24.0.2)
  2. Android SDK Platform-tools (Rev. 21)
  3. Android SDK Build-tools (Rev. 21.1.2)
  4. Android 5.0.1 (API 21)
    1. SDK Platform
    2. Google APIs
    3. Google APIs Intel x86 Atom System Image
  5. Android 4.4.2 (API 19)
    1. SDK Platform
    2. Google APIs (x86 System Image)
  6. Extras
    1. Android Support Repository (Rev. 11)
    2. Google Play Services (Rev. 22)
    3. Google Repository (Rev. 15)

Si nuestro PC no fuera compatible con HAXM, podemos sustituir los componentes 4.3 y 5.2 por los dos siguientes (la funcionalidad será la misma aunque el rendimiento será más lento):

  • 4.3. Google APIs ARM EABI v7a System Image
  • 5.2. Google APIs (ARM Systema Image)

Seleccionaremos los componentes que queremos instalar o actualizar, pulsaremos el botón “Install packages…”, aceptaremos las licencias correspondientes, y esperaremos a que finalice la descarga e instalación. Una vez finalizado el proceso es recomendable cerrar el SDK Manager y reiniciar Android Studio.

Con este paso ya tendríamos preparadas todas las herramientas necesarias para comenzar a desarrollar aplicaciones Android. En próximos apartados veremos como crear un nuevo proyecto, la estructura y componentes de un proyecto Android, y crearemos y probaremos sobre el emulador una aplicación sencilla para poner en práctica todos los conceptos aprendidos.

Etiquetas: , , ,
Comentarios: Comentarios desactivados

Actualización del curso a Android Studio y Android 5.0  

Después de algún tiempo de inactividad, y aprovechando el reciente lanzamiento de la versión estable de Android Studio y de Android 5.0 (Lollipop), empezamos desde hoy con la actualización de nuestro Curso de Programación Android para adaptarlo a todas estas novedades.

android-studio

La primera de ellas, Android Studio, afectará principalmente a los capítulos iniciales del curso, donde se explicará cómo instalar las nuevas herramientas de desarrollo para Android y cómo empezar a desarrollar sobre ellas. No eliminaré por ahora los capítulos iniciales sobre Eclipse+ADT, aunque los marcaré como obsoletos en el índice del curso, dado que Google ha anunciado el fin del desarrollo de dicha plataforma. En el resto de capítulos, a medida que actualice los contenidos iré modificando también las referencias a Eclipse para actualizarlas a la nueva funcionalidad de Android Studio.

En cuanto a Android 5.0 Lollipop, aún no tengo claro el grado de cobertura que tendrá en el curso, aunque sí puedo asegurar que estará muy presente ya que trae consigo algunas novedades muy interesantes respecto a las versiones 4.x. Sí aprovecharé la actualización para eliminar cualquier referencia a versiones de Android anteriores a la 4.0, que son ya poco utilizadas y no hacen más que “ensuciar” el contenido de algunos capítulos. Mi intención es utilizar como versión mínima de desarrollo para el curso la 4.0.3 (API 15).

La actualización del contenido online del curso será progresiva durante las próximas semanas/meses, y el proceso concluirá con la publicación de una nueva versión del curso completo en formato PDF.

Gracias por vuestro apoyo, vuestra paciencia, y espero que disfrutéis de los cambios que se avecinan.

Etiquetas: , , ,
Comentarios: Comentarios desactivados

LG G Watch R  

Siguiendo con la serie de post relacionados con esos productos con lo que hacer felices a los tuyos estas navidades, hoy os presentamos el LG G Watch R el segundo Smartwatch con Android Wear que ha lanzado al mercado la marca Koreana LG. Y no os perdáis el vídeo que os hemos preparado, que no tiene …

Continuar leyendo »

The post LG G Watch R appeared first on DesAndrOId.

Etiquetas: ,
Comentarios: Comentarios desactivados

Energy Phone Neo  

Que las navidades ya están a la vuelta de la esquina es un hecho, y es por eso que vamos a empezar con la serie de análisis navideños, y así daros ideas con las que poder sorprender a los vuestros. Empezamos esta serie presentando el Energy Phone Neo, un terminal de la marca Española Energy …

Continuar leyendo »

The post Energy Phone Neo appeared first on DesAndrOId.

Etiquetas:
Comentarios: Comentarios desactivados

Entendiendo Material Design  

materialdesign_introduction

“Material design es un lenguaje visual creado para nuestros usuarios que sintetiza los principios clásicos del buen diseño con la innovación y posibilidad de la tecnología y la ciencia, material design.”

Material como una metáfora

Material design está motivado por el estudio del comportamiento de las superficies, papel y tinta.

Los fundamentos de la superficie y la luz entrañan la esencia para explicar los movimientos de los objetos, como interactúan y como se transforman.

materialdesign_principles_metaphor

Material es, gráfico e intencional

Determinadas opciones de color, tipografías y espacios en blanco puestos de forma intencionada, ayudan a enfatizar las funcionalidades principales de forma evidente además de proporcionar puntos de referencia para el usuario.

intentional

Movimiento

Los objetos se presentan al usuario sin romper la continuidad de una experiencia, reorganizándose y transformándose, cada aplicación cuenta una historia a través del diseño.

pixate

Colores

La especificación de Material Design hace hincapié en sombras atrevidas y en las luces, en colores inesperados y vibrantes, por ello la propia especificación provee una paleta de colores que se pueden usar y combinar.

De una forma muy sencilla se pueden especificar los colores de todos los componentes, barra de navegación, color de acento y demás bajo la versión 21 del framework, o bien con la librería de compatibilidad AppCompat.

Screen Shot 2014-11-25 at 20.56.30

Únicamente modificando el styles.xml bajo la v21 se puede conseguir los colores de la imagen

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="theme_primary">#48C2F9</color>
    <color name="theme_dark">#18B5F9</color>
    <color name="theme_accent">#FFCB00</color>
    <color name="theme_components">#FFB400</color>
    <color name="theme_wbackgound">#F5F5F5</color>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light">
        <item name="android:colorPrimary">@color/theme_primary</item>
        <item name="android:colorPrimaryDark">@color/theme_dark</item>
        <item name="android:navigationBarColor">@color/theme_primary</item>
        <item name="android:colorAccent">@color/theme_accent</item>
        <item name="android:colorControlActivated">@color/theme_components</item>
        <item name="android:colorControlNormal">@color/theme_accent</item>
        <item name="android:windowBackground">@color/theme_wbackgound</item>
    </style>
</resources>

Palette

Palette es una librería incluída en la librería de compatibilidad v7, que permite extraer colores de una imagen, Palette extrae ciertos perfiles con un número determinado de colores, la extracción de colores dependiendo del número de colores es una operación costosa, por lo que debería no usarse en el hilo principal, por ello se proveen métodos asíncronos para esta tarea.

Para importar la librería:

dependencies {
    compile 'com.android.support:palette-v7:21.0.0'
}

Para conseguir la paleta:

Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
       @Override
       public void onGenerated(Palette palette) {

            bookTitle.setTextColor(palette.getLightVibrantColor(defaultTextColor));
            bookAuthor.setTextColor(palette.getVibrantColor(defaultTextColor));
      }
});

Elevación

Material design introduce un nuevo concepto en cuanto al diseño en android, la elevación para los elementos de la interfaz gráfica.

La elevación ayuda a los usuarios a entender la importancia de cada elemento y centrar su atención en la tarea principal.

elevation_sample

Este ejemplo se puede conseguir facilmente añadiendo un StateListAnimator que defina las animaciones en función del estado de una vista, de tal forma que tan solo con una línea en vuestro layout se pude conseguir una animación suave que dará el foco a la vista que se pretenda mostrar.

Este ejemplo se ha hecho únicamente con el siguiente layout y selector:


  Selector, translation_selector:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#EAEAEA"
    >

    <android.support.v7.widget.Toolbar
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:background="?android:colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:elevation="5dp"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        >

        <android.support.v7.widget.CardView
            android:layout_gravity="center"
            android:layout_width="100dp"
            android:layout_height="96dp"
            android:layout_marginTop="16dp"
            android:stateListAnimator="@drawable/translation_selector"
            android:elevation="2dp"
            android:clickable="true"
            card_view:cardCornerRadius="4dp"
            />

        <android.support.v7.widget.CardView
            android:layout_gravity="center"
            android:layout_width="100dp"
            android:layout_height="96dp"
            android:layout_marginTop="16dp"
            android:stateListAnimator="@drawable/translation_selector"
            android:elevation="2dp"
            android:clickable="true"
            card_view:cardCornerRadius="4dp"
            />

        <android.support.v7.widget.CardView
            android:layout_gravity="center"
            android:layout_width="100dp"
            android:layout_height="96dp"
            android:layout_marginTop="16dp"
            android:layout_marginBottom="@dimen/activity_vertical_margin"
            android:stateListAnimator="@drawable/translation_selector"
            android:elevation="2dp"
            android:clickable="true"
            card_view:cardCornerRadius="4dp"
            />

    </LinearLayout>
</FrameLayout>

Selector, translation_selector:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <set>
            <objectAnimator android:propertyName="translationZ"
                android:duration="@android:integer/config_shortAnimTime"
                android:valueTo="10dp"
                android:valueType="floatType"/>
        </set>
    </item>
    <item
        android:state_pressed="false"
        >
        <set>
            <objectAnimator android:propertyName="translationZ"
                android:duration="100"
                android:valueTo="2dp"
                android:valueType="floatType"/>
        </set>
    </item>
</selector>

Transiciones

Las transiciones fueron introducidas con android KitKat 4.4, con Lollipop y Material Design toman un papel muy importante a la hora de diseñar la experiencia de usuario, el propio tema de material añade transiciones para sus actividades, incluyendo la capacidad de utilizar elementos visuales compartidos y transiciones predefinidas como Explode, Fade, .

Es tan sencillo como configurar el nombre de la vista de una actividad a la otra y especificar, antes de cambiar de actividad cuál es el elemto compartido.

Layout 1

    ...
    <Button
        android:id="@+id/fab_button"
        android:layout_width="@dimen/fab_size"
        android:layout_height="@dimen/fab_size"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_below="@+id/holder_view"
        android:layout_marginTop="-26dp"
        android:layout_alignParentEnd="true"
        android:transitionName="fab"
        android:background="@drawable/ripple_round"
        android:stateListAnimator="@anim/fab_anim"
        android:elevation="5dp"
        />
      ...

En este caso la vista compartida es un floating action button, el atributo importante en este caso es el de android:transitionName=”fab” ya que es el nombre que identifica al a vista en la transición de las actividades

Actividad 2:

        ...
        Intent i  = new Intent (TransitionFirstActivity.this, 
            TransitionSecondActivity.class);

        ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation(
            TransitionFirstActivity.this, Pair.create(fabButton, "fab"));

        startActivity(i, transitionActivityOptions.toBundle());
       ...

Layout 2

    <Button
        android:id="@+id/fab_button"
        android:layout_width="@dimen/fab_size"
        android:layout_height="@dimen/fab_size"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:background="@drawable/ripple_round"
        android:stateListAnimator="@anim/fab_anim"
        android:transitionName="fab"
        android:elevation="5dp"/>

Todo esto se ilustra de la siguiente forma:

68747470733a2f2f6c68342e676f6f676c6575736572636f6e74656e742e636f6d2f2d646d44466f4637633555592f564437374e73464b386b492f4141414141414141754c4d2f4d74537150384a6f51636f2f773238322d683439392d6e6f2f323031342d31302d313625324230305f35315f33342e6769

Ripples

Android Lollipop, siguiendo con los principios de material design, provee un feedback visual al usuario para que sepa que ha ocurrido algo, toda acción conlleva una reacción, esto hasta ahora se venía haciendo usando state list drawables.

El efecto del Ripple, se puede comparar como una expansión en una superficie líquida, una expansión desde el punto donde se ha tocado.

Los Ripples, son un nuevo tipo de Drawable (RippleDrawable), para usarlo es tan sencillo como asignarlo como background a una vista.

ripples

Referencias y recursos:

Material design android samples

Material design spec

Defining custom animations

What material means to android – David Gonzalez

Material design checklist

Creating apps with material design

Material design bytes

Creating apps with material design


Comentarios: Comentarios desactivados

OYE ToDo, el Smartwatch Español  

En la entrada de hoy os queremos presentar uno Smartwatch que nos ha llamado la atención por varios motivos y no querías dejar pasar la oportunidad de presentároslo, hoy os hablamos del OYE ToDo, un Smartwatch Lowcost que estamos seguros que a muchos de vosotros os parecerá interesante por cubrir todas vuestras necesidades. Con unas …

Continuar leyendo »

The post OYE ToDo, el Smartwatch Español appeared first on DesAndrOId.

Etiquetas:
Comentarios: Comentarios desactivados

Un vistazo rápido al nuevo RecyclerView  

lpreview

Con la versión preview de android L, Google ha presentado dos nuevos Widgets, RecyclerView y CardView, este artículo tratará el primero, el RecyclerView.

Este nuevo Widget entra en juego cuando el propósito es mostrar gran número de Views repetidamente, listas, grids, etc…, tantas que no entran en la pantalla.

RecyclerView implementa un sistema para llevar a cabo esta tarea, de forma sencilla y eficiente.

Proyecto de ejemplo

rv_demo

Todos los ejemplos de código que se muestran en este artículo se pueden encontrar en este proyecto en GitHub de forma funcional:

https://github.com/saulmm/RecyclerView-demo.git

La API de RecyclerView

A diferencia del ListView, GridView, etc… el RecyclerView se dedica únicamente a lo que su nombre indica, reciclar, reutilizar recursos y evitar el uso reiterado del costoso findViewById, no se preocupa del aspecto visual, para ello está el LayoutManager, 

Una clase una tarea, esa es la filosofía que sigue la API del RecyclerView, un paquete de clases  internas cada una con una responsabilidad:

  • Adapter
  • ViewHolder
  • LayoutManager
  • ItemDecoration
  • ItemAnimator

Adapter

Esta clase se encarga de crear las Views necesarias para cada elemento del RecyclerView, además, está muy unida al ViewHolder, teniendo que ser indicado en la declaración de la clase, muchos pensaréis que esto no es nuevo, que Google ya aconsejara este patrón tiempo atrás, esta vez fuerza a utilizarlo, teniendo que ser indicado en la implementación del Adapter, un paso adelante, sin duda.

El método OnCreateViewHolder inicializa el ViewHolder

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parentViewGroup, int i) {

        View rowView = LayoutInflater.from (parentViewGroup.getContext())
            .inflate(R.layout.list_basic_item, parentViewGroup, false);

        return new ViewHolder (rowView);
    }

El método onBindViewHolder(ViewHolder viewholder, int position) se usa para configurar el contenido de las Views

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        final SampleModel rowData = sampleData.get(position);
        viewHolder.textViewSample.setText(rowData.getSampleText());
        viewHolder.itemView.setTag(rowData);
    }

ViewHolder

Como venía diciendo, el patrón ViewHolder no es nada nuevo, de hecho Google, lo lleva recomendando desde hace tiempo, se puede pensar en el como un cache de las vistas, pudiendo reutilizarlas en vez de crearlas nuevamente.

    
   @Override
   public static class ViewHolder extends RecyclerView.ViewHolder {

        private final TextView textViewSample;

        public ViewHolder(View itemView) {
            super(itemView);

            textViewSample = (TextView) itemView.findViewById(
                R.id.textViewSample);
        }
    }

LayoutManager

El LayoutManager se encarga del layout de todas las vistas dentro del RecyclerView, concretando con el LinearLayoutManager, permite entre otros acceder a elementos mostrados en la pantalla como el primer elemento, último, o por ejemplo, el último completamente visible, esto de forma horizontal o vertical, en el ejemplo se ha utilizado la disposición en vertical.

    

        LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(mLayoutManager);

ItemDecorator

Otro eslabón importante, son los llamados ItemDecorator, estos permiten modificar los elementos del RecycleView, este además, ofrece además ofrece un elemento llamado insets (márgenes) que pueden aplicarse a las vistas sin necesidad de modificar los parámetros del layout.

En el ejemplo, se muestra como se usan los ItemDecorators para dibujar un pequeño Divider entre los elementos del RecyclerView:

    
package saulmm.com.recyclerviewproject;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.View;

public class SampleDivider extends RecyclerView.ItemDecoration {

    private static final int[] ATTRS = { android.R.attr.listDivider };

    private Drawable mDivider;

    public SampleDivider(Context context) {
        TypedArray a = context.obtainStyledAttributes(ATTRS);
        mDivider = a.getDrawable(0);
        a.recycle();

    }

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent) {

        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();

        for (int i = 0; i < childCount; i++) {

            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();

            int top = child.getBottom() + params.bottomMargin;
            int bottom = top + mDivider.getIntrinsicHeight();

            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
}

ItemAnimator

La clase ItemAnimator como su nombre indica, anima el RecyclerView cuando se añade y se elimina un elemento, el RecyclerView utiliza un ItemAnimator por defecto.

El RecyclerView ha de saber cuando se inserta un elemento o se elimina, con elementos como ListViews, GridViews, etc… esto se conseguía llamando al método notifyDataSetChanged(), a nivel de performance, es bastante costoso, ya que redibuja todos los items en el layout, lo propio con el RecyclerView es usar el método notifyItemInserted() para añadir, y notifyItemRemoved() para eliminar, actualizando solo la parte apropiada.

Referencias:

Wolfram RittMeyer – A first Glance at Android’s RecyclerView

Wires are obsolete – Building a RecyclerView

Android L – Reference


Comentarios: Comentarios desactivados

Los mejores atajos de teclado para Android Studio  

android_studio

Sin lugar a duda, android studio se ha convertido en la herramienta principal para el desarrollador android actual. A veces, uno no es consciente de las grandes características que este entorno de desarrollo ofrece, live templates, code inspection… entre muchas otras .

Una de ellas, son los atajos de teclado, android studio ofrece una gran catálogo que pueden aumentar vuestra productividad considerablemente.

El trabajo que ha hecho Philippe Breault, ha sido impoluto, quién nos ha permitido usar sus imágenes para hacer recopilación de algunos de los atajos de teclado más interesantes que éste IDE ofrece.

Moverse entre métodos y clases internas

Éste atajo permite mover el cursor al nombre del siguiente método o clase en el archivo que tengas abierto en el editor en ese momento.

Windows: ctrl + up / down
Mac: alt + up / down
moverse_entre_metodos

Ver el Popup de la estructura del archivo

Muy parecido a la herramienta outline que se puede encontrar en eclipse, este atajo de teclado permite abrir un popup con la estructura del archivo que tengas abierto en el editor.

Un método rápido para filtrar es usar el teclado, ésta es una manera bastante productiva de ir a un método o clase del que se conozca el nombre.

Windows: ctrl + F12
Mac: cmd + F12

estructura_archivo

Abrir la jerarquía de llamadas

Con este atajo de teclado es posible desplegar el panel con la jerarquía de llamadas del método o variable que esté bajo tu cursor.

Windows: ctrl + alt + h
Mac: ctrl + cmd + h

jerarquía_de_llamadas

Encapsular / desplegar bloque

Ocultar pedazos de código como todos los métodos que se estén utilizando puede se útil para mantener la atención en un único lugar.

Windows: ctrl + shift + plus(+) / minus(-)
Mac: cmd + plus(+) / minus(-)

expandir_colapsar

Encontrar acciones

Este atajo permite abrir un popup para ejecutar una opción de forma rápida, sin necesidad de usar el ratón.

Windows: ctrl + shift + a
Mac: cmd + shift + a

popup_de_acciones

Mover lineas

Atajo para mover lineas hacia arriba y hacia abajo

Windows: alt + shift + up / down
Mac: cmd + shift + up / down

mover_lineas

Expandir selección

A partir del cursor, selecciona la expresión, método, clase, etc…

Windows: ctrl + shift + up / down
Mac: alt + up / down

 expandir_seleccion

Encapsular selección en…

A partir del código seleccionado en alguna estructura, es posible encapsularlo en un try / catch, if, do / while, etc…

Windows: ctrl + alt + t
Mac: cmd + alt + t

encapsular_seleccion

Archivos recientes

Atajo de teclado usado para mostrar un popup con los archivos más consultados

Windows / Linux: ctrl + e
Mac: cmd + e

recientes

Multicursor

Uno de los mejores, seleccionando un patrón que se repita, se habilitan múltiples cursores para editar todas las ocurrencias al mismo tiempo.

Windows: alt + j
Mac: ctrl + g

multicursor

Selección por columnas

Con este atajo es posible crear una selección en columna.

Windows / Linux: shift + alt + insert
Mac: cmd + shift + 8

Ratón: alt + arrastrar

seleccion_columna

Todos estos atajos y algunos más los podéis encontrar en el blog de Phillippe Breault, además, podéis consultar todas las acciones en el apartado de opciones del entorno de desarrollo bajo keymap.

 


Comentarios: Comentarios desactivados

LG Tone Pro  

Desde hace ya alguno días venimos probando unos de los auriculares más interesante que hemos visto en los últimos meses, hoy os presentamos los LG Tone Pro, uno auriculares con funciones de manos libres que por su diseño y su calidad merecen estar en nuestro blog. Son muchos los aspectos que hacen de los LG …

Continuar leyendo »

The post LG Tone Pro appeared first on DesAndrOId.


Comentarios: Comentarios desactivados

Energy Sport Cam Pro  

Una vez más os presentamos un producto de la marca Española, Energy Sistem, y es que estos chicos no dejan de sorprendernos con su catálogo de productos. Hoy os presentamos la Energy Sport Cam Pro, una cámara deportiva de calidad profesional que una digna rival para otras más conocidas de la misma clase. No os …

Continuar leyendo »

The post Energy Sport Cam Pro appeared first on DesAndrOId.

Etiquetas: , ,
Comentarios: Comentarios desactivados

Disclaimer: Las imágenes mostradas en ésta página web se utilizan sólamente con propósitos ilustrativos, y son propiedad de sus respectivos autores (cuando es aplicable).
Hijo de Blog es un producto del Dr. SeROne

Los contenidos se ofrecen bajo una licencia de Creative Commons
Attribution-NonCommercial-NoDerivs 3.0 Unported

salvo que se indique lo contrario

Licencia de Creative Commons