É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.

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

LG G Watch, la Video Review  

Hace ya algunos meses que la marca Koreana nos sorprendió con este Smartwatch, un reloj que les abría las puertas a la nueva plataforma creada por Google, os hablamos de Android Wear. No os perdáis la video review que os hemos preparado para esta entrada, por que no tiene desperdicio. Mucho que ha hablado sobre …

Continuar leyendo »

The post LG G Watch, la Video Review appeared first on DesAndrOId.


Comentarios: Comentarios desactivados

Pantalla de Bloqueo al estilo Moto X con Dynamic Notifications  

DynamicNotifications

Twitter: @iamkore

Seguro que muchos ya conocen la pantalla inteligente de desbloqueo que viene de fabrica con los Moto X, dispositivo de Motorola que ya tiene un rato en el mercado y que sin duda una de sus puntos fuertes es su pantalla de desbloqueo inteligente que cada que tenemos una notificación nueva, la pantalla prende de forma automática para mostrarnos dicha notificación, de igual forma la pantalla se activa cuando el celular detecta que lo estamos sacando de nuestro bolsillo para activarse y mostrarnos la hora, sin duda un sistema de bloqueo que innovó en su momento la forma para ver nuestras notificaciones.

Pero como sabemos que una imagen vale mas que mil palabras, en el siguiente vídeo podrán ver a lo que nos referimos:

Desde hace un tiempo esta función era exclusiva del Moto X pero gracias a los desarrolladores actualmente contamos con un par de aplicaciones que emulan perfectamente esta función, una de ellas es Dynamic Notifications, que al igual que la app nativa del Moto X podremos seleccionar que aplicaciones queremos que nos muestre en las notificaciones y que la pantalla se active de forma automática cada que tengamos una notificación.

Pero las funciones Dynamic Notifications no solo son esas, ya que al igual que en el Moto X, detectara cada que saquemos nuestro dispositivo del bolsillo para activar la pantalla y mostrarnos la hora.

Sin embargo un punto a favor es que con esta aplicación tendremos varias funciones para personalizar la forma en la que nos muestre las notificaciones como el color de los iconos, el fondo de pantalla que puede ser completamente negro (para mejor ahorro de batería) o bien poner alguna fotografía directamente de nuestra galería, también podremos ajustar el tiempo en el que el celular esta activo mostrándonos las notificaciones. Otro punto a favor es que no provoca un gasto excesivo en nuestra batería pero que quizás notemos a lo largo del día.

Como ya viene siendo costumbre la aplicación cuenta con una versión gratuita y otra de pago con la que tendremos accesos a mas funciones, sin duda una aplicación que nos ayudara a automatizar mas nuestro dispositivo y con la que nos ahorraremos algo de tiempo al ver nuestras notificaciones.

LomoCamera

Etiquetas:
Comentarios: Comentarios desactivados

Hangout – Android L y Material Design  

Es un gusto saludarlos nuevamente comunidad de androides. En esta ocasión quiero presentarles una iniciativa llamada #androidIO de la comunidad de desarrolloweb.com. La modalidad del #androidIO es que a través de un Hangout podamos compartir conocimientos, noticias, y aclarar dudas acerca del desarrollo en Android. Estos hangouts se llevan a cabo los días viernes a las 3:00 PM horario México.

Esta semana soy la invitada en #androidIO para platicarles acerca de Android L y Material Design; una de las más recientes novedades presentadas en el Google I/O de este año. El tema de Android L trae consigo un nuevo diseño de UI, un nuevo runtime (ART = Android Runtime), nuevas herramientas para personalizar nuestras notificaciones y una nueva API llamada Project Volta cuyo objetivo es hacer a la plataforma más eficiente y ayudarnos a tener un mayor control y administración de los recursos de los dispositivos. Por otro lado, hablaremos de Material Design, los nuevos guidelines de diseño para construir nuestras aplicaciones, los nuevos widgets que incluye ya la plataforma y la nueva API para personalizar animaciones.

Para las personas que deseen seguirnos en vivo, recuerden que iniciamos la transmisión este viernes 22 de agosto en punto de las 3:00 PM hora de México. Ponte al día con las novedades de Android para mejorar tus aplicaciones. ¡Te esperamos con tus dudas y preguntas!

Más información de #androidIO aquí.


Comentarios: Comentarios desactivados

Leer los meta-data del AndroidManifest.xml en tu aplicación  

¿Os habéis preguntado alguna vez cómo se pueden pasar datos a tu activity que estén definidos directamente en el AndroidManifest.xml? ¿U os habéis preguntado como se leen esas API keys definidas en los meta datos de la aplicación en el manifest?

Pues en realidad es muy sencillo y dependiendo de donde pongamos el elemento <meta-data> se hará de una forma u otra.

Estos meta datos pueden ser constantes, claves de api, cadenas con parámetros opcionales, etc. Los definimos en el AndroidManifest.xml y pueden tener distintos ámbitos. Cuando una librería nos pide meter una API key suele hacerse en un elemento <meta-data> dentro del <application> pero se puede hacer a nivel de <activity>, <provider>, <receiver> o <activity-alias> y dependiendo de dónde esté, se hará llamando a unos métodos u otros.

Pongamos por caso que tenemos un activity definido así:

<activity android:name=".MiActivity">
    <meta-data
        android:name="com.miapp.midato"
        android:resource="@string/midato" />
</activity>

En este caso hemos puesto una etiqueta <meta-data> en un activity, así que para leerlo nos referimos a la clase ActivityInfo que obtenemos a través del PackageManager así:

ActivityInfo ai = this.getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_ACTIVITIES|PackageManager.GET_META_DATA); 
int stringReference = ai.metaData.getInt("com.miapp.usuario")

Vemos en este caso que el atributo que hemos definido en los meta datos es un android:resource, por lo tanto lo tenemos que recuperar con un getInt que nos devolverá el id de la referencia, luego podemos recuperar el valor con getString(stringReference).

Pero si en vez de usar android:resource usamos android:value podemos usar tipos primitivos como string, int, bool, float y color, y que recuperaríamos luego con getString(), getInt(), getBoolean(), getFloat() y getInt() respectivamente.

En el caso de que los meta datos sean a nivel de aplicación y los hayamos definido dentro de <application> entonces para recuperarlos tenemos que usar el ApplicationInfo:

ApplicationInfo ai = getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("com.miapp.usuario");

Para un <meta-data> dentro de un <receiver> usaríamos getReceiverInfo() y así sucesivamente.

Un truco que he aprendido es, si quieres poner dos iconos diferentes en el launcher de android para abrir tu app y que realmente solo necesitas que se abra la misma activity inicial pero con diferente parámetro, puedes usar un <activity-alias> y un <meta-data> para pasar ese parámetro.

<activity
    android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity-alias
    android:name=".MainActivityWithParameter"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <meta-data android:name="com.miapp.specialparameter"
        android:value="true" />
 </activity-alias>

Y luego en el onCreate o donde quieras del MainActivity.java, leer si existe este parámetro con getBoolean(“com.miapp.specialparameter”,false); y hacer una cosa u otra según esté presente  o no.

Espero que os haya gustado este mini tutorial y si tenéis preguntas os intentaré contestar aquí, y si no, a StackOverflow!


Comentarios: Comentarios desactivados

Cámara Intempo HD Action  

Es tiempo de vacaciones y estoy seguro de que muchos de vosotros aprovechareis este tiempo para hacer esas pequeñas locuras que os hacen disfrutar de vuestro tiempo libre. Hoy os presentamos uno de esos gadgets que harán que podais revivir esos momentos por siempre, hoy os presentamos la Intempo HD Action, una cámara que os hará …

Continuar leyendo »

The post Cámara Intempo HD Action 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