Programación Android, Cómo usar múltiples Fragments II

Cómo usar múltiples Fragments
Cómo usar múltiples Fragments

En el primer post de cómo usar múltiples fragments en Android hicimos que, cada vez que se creaba una nueva transacción para mostrar diferentes fragments a la pantalla, se realizaran los cambios necesarios en el mapa que contenía la colección de commits. Pero hay una forma de realizar estas comprobaciones de una forma centralizada (para que todos los cambios para eliminar commits en este mapa esté en un mismo punto), y utilizaremos esta misma opción para controlar qué debe mostrarse en pantalla.

Un ejemplo para aclarar esto, sobre el ejemplo de 3 columnas que estamos trabajando, imaginemos que queremos mostrar la primera columna cuando no haya ningún fragment en la columna central, la columna central cuando tenga un fragment visible, pero no haya ninguno en la tercera columna y la tercera columna cuando contenga un fragment visible. En este caso cada vez que vayamos a mostrar un nuevo fragment tendremos que comprobar cuál está presente y mostrar la columna que queramos mostrar, y podremos hacerlo en cuanto añadimos el fragment, pero ¿qué pasa si le damos al botón atrás del dispositivo? El fragment ya no está visible, pero no tenemos control sobre esto y por lo tanto se sigue viendo la columna que ahora ya está vacía.

Leer más…

Programación Android, Cómo usar múltiples Fragments

Cómo usar múltiples fragments
Cómo usar múltiples fragments

Aprovechando que volvemos a tener tiempo libre en esta ocasión vamos a escribir un tutorial que hacía tiempo que queríamos hacer para explicar cómo usar múltiples fragments en una misma pantalla. En su día ya explicamos cómo usar los fragments, pero utilizando tabs, o pestañas, para mostrarlos, en esta ocasión explicaremos cómo tener el control del estado de estos para poder mostrar los datos en pantalla de forma correcta. Es decir, imaginemos que tenemos la pantalla dividida en 3 columnas diferentes, cada una de estas columnas es un área para mostrar fragments, y la última columna la dividimos en 2 filas, de manera que tendríamos un total de 4 áreas para fragments. Estando en landscape (dispositivo en horizontal) tenemos espacio de sobra para mostrar toda la información, sin embargo si giramos a portrait (vertical) estas áreas serán demasiado pequeñas como para mostrar todo lo que queremos, por lo que deberíamos mostrar el último detalle añadido, es decir, la última de las columnas que contengan datos. Sin embargo, al volver a landscape tendríamos que volver a mostrar todas las áreas de nuevo.

Por otra parte, si estamos mostrando información en la última columna, y decidimos cargar otra información distinta posteriormente, tendríamos que mantener la lógica de la cola de fragments que vayamos creando, para que al darle al botón atrás mantengamos una navegación lógica para el usuario, por lo tanto tenemos que crear una lógica que nos permita controlar distintos niveles, para añadir y eliminar fragments donde lo necesitemos.

Leer más…

Programación Android, Creación de un control personalizado

Control personalizado
creación de un control personalizado

En Android existe una gran cantidad de controles que podemos utilizar para conseguir realizar las interfaces que necesitemos, pero una de las posibilidades que nos ofrece es la de crear nuestros propios controles personalizados, de manera que en un único control, creado por nosotros mismos, podamos crear múltiples controles. El clásico ejemplo es el de la gestión de una ventana de login, en la que existen dos campos en los que escribir texto (usuario y contraseña), y un botón para aceptar el login.

En Internet pueden encontrarse muchos tutoriales sobre la creación de un control personalizado, y muchos de ellos utilizando el propio ejemplo del login para explicarlo. Sin embargo siempre hemos echado en falta un elemento que nos gustaría explicar en este tutorial. Esto es la posibilidad de configurar los eventos onClick de los elementos internos de nuestro control personalizado utilizando atributos en xml. Como sabéis, desde xml podemos configurar el atributo android:onClick=””, dándole como valor el nombre del método que debe lanzarse, y que posteriormente tenemos que codificar en nuestra Activity en Java. Sin embargo este evento, si lo escribimos tal cual sobre nuestro control, se lanzará cuando se pulse sobre cualquier zona del control, y no tendríamos la capacidad de lanzarlo únicamente cuando se pulsara, por ejemplo, el botón para aceptar el login antes citado.

Creación de un control personalizado

Como el ejemplo del login está muy utilizado, nosotros vamos a crear un control diferente, en el que pondremos un botón a cada lado, y entre ambos botones posicionaremos un texto, que irá cambiando a medida que se pulse uno u otro botón. En primer lugar crearemos el xml con el layout que dará forma a nuestro control personalizado:

<?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="match_parent"
              android:orientation="horizontal">

    <Button
        android:id="@+id/btPREV_SLIDER_CUSTOMER_DETAILS"
        android:background="@android:color/transparent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="<"/>

    <TextView
        android:id="@+id/tvSliderText_SLIDER_CUSTOMER_DETAILS"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:maxLines="1"
        android:gravity="center"/>

    <Button
        android:id="@+id/btNext_SLIDER_CUSTOMER_DETAILS"
        android:background="@android:color/transparent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=">"/>

</LinearLayout>

Como hemos dicho, tenemos un botón en cada lado, a los que hemos dado un fondo transparente, y entre ambos botones hemos colocado un TextView que contendrá el texto que queramos mostrar.
Leer más…

Programación Android, Creación de Widgets II

Creación de widgets
Después de un tiempo excesivo de inactividad (lo lamentamos, pero entre cursos, viajes y trabajo ha sido imposible sentarse a escribir una nueva entrada), volvemos a la carga para terminar el tutorial que dejamos a medias sobre cómo crear widgets.

En la anterior entrada comenzamos con la creación de widgets, para que el sistema lo detectara como tal y pudieramos agregarlo a la pantalla principal del dispositivo. En esta ocasión vamos a retomar este ejemplo, y vamos a añadirle la posibilidad de interactuar con él. Lo que vamos a crear es un sencillo widget que nos va a permitir cambiar el estado del sonido del dispositivo, intercambiando entre el volumen que haya dejado el usuario en el dispositivo y ponerlo en silencio con vibración.

Creación de widget

En primer lugar, para poder hacer esto, vamos a modificar el xml del widget, cambiando el TextView que contiene por un ImageView que nos permitirá configurar un recurso que indique al usuario si el dispositivo está en silencio o no, y cambiarlo cada vez que el usuario pulse sobre nuestro widget, además le eliminaremos el shape que inicialmente configuramos:
Leer más…

Programación Android, Cómo usar Fragments con ViewPager y efecto Swipe

Cómo usar Fragments con ViewPager y efecto Swipe
ActionBar con Pestañas

En esta ocasión vamos a crear un tutorial sobre cómo usar Fragments con ViewPager y efecto Swipe, es decir, mostraremos un conjunto de pestañas en la parte superior de la pantalla y cada pestaña tendrá asignado un Fragment para mostrar una determinada información en pantalla, y habilitaremos el efecto Swipe (desplazamiento lateral) para que se muestre de forma correcta la pestaña seleccionada en todo momento.

Como en los ejemplos que se pueden ver por internet sólo explican cómo crear pestañas que contengan pantallas en blanco, o con poca información, y si se utiliza el manager que nos ofrece el ADT para crear este tipo de controles nos crea un archivo que contiene todas las clases que se utilizan (lo que no permite organizar el código como más le guste a uno), en esta ocasión vamos a crear clases diferentes para los fragments que podamos utilizar, para el adaptador que se necesita para gestionar los Tabs (pestañas), etc. La compatibilidad que obtendremos usando las librerías nativas será a partir de API 11, que corresponde a la versión 3.0 de Android.
Leer más…

Programación Android, menú contextual (registerForContextMenu)

En la publicación de la semana pasada hablamos sobre cómo crear y manejar menús en Android, pero existen también otro tipo de menús, el menú contextual. A diferencia del menú normal, el menú contextual se mostrará en función del elemento seleccionado de la pantalla, cuando, sobre éste elemento, se realice una pulsación larga.

Este tipo de menú nos ofrece, como veremos más adelante, la posibilidad de mostrar un menú específico para cada elemento al que hayamos registrado un menú.

Como siempre, vamos a realizar un sencillo ejemplo para que resulte más fácil entender cómo manejar este elemento. Esta vez vamos a crear una interfaz con 1 TextView y 2 botones, y cambiaremos el texto a mostrar en el TextView en función de si hacemos una pulsación normal sobre el botón, o si seleccionamos alguna de las opciones del menú contextual asignado a cada botón:

Activity RegisterForContextMenu
Activity

Leer más…

Programación android, Cómo usar un Menú

Menú en Android
En esta ocasión vamos a explicar cómo usar el menú en las aplicaciones Android. En algún ejemplo que hemos hecho en Proyecto Simio, la lógica de la interfaz era “poco útil”, por ejemplo en el último que hicimos sobre Preferencias de Usuario, para llamar a las preferencias lo hacíamos a través de un botón, sin embargo, si pensamos en la optimización de la experiencia del usuario que vaya a utilizar nuestra aplicación, éste esperará encontrar las preferencias a partir de un menú.
Como siempre, vamos a utilizar un pequeño ejemplo para configurar y utilizar nuestro menú, esta vez utilizaremos un Layout con un simple TextView que va a mostrar la opción del menú que se ha seleccionado.
Leer más…

Programación Android, Preferencias de usuario (SharedPreferences, PreferencesActivity y PreferenceFragment)

SharedPreferences

Después de unas semanas de vacaciones volvemos a la carga con una nueva publicación sobre programación Android. En esta ocasión vamos a hablar de la posibilidad de almacenar preferencias de usuario (SharedPreferences) en nuestra aplicación, utilizando la herramienta que nos facilita Android para ello.

Para explicar el uso de esta herramienta vamos a crear una aplicación con una pantalla que contenga un TextView. El texto a mostrar, el tamaño de la fuente y el fondo del TextView los podremos configurar a partir de las preferencias del usuario, o dejar unos valores por defecto.

En primer lugar vamos a crear una Activity en nuestro proyecto que contenga un TextView, que será el que muestre los valores de las preferencias, y un Button que lanzará la pantalla de preferencias:

Main Activity
Main Activity

Leer más…

Programación Android, Restringir aplicación para dispositivos smartphone o tablet

smpartphone_tablet

Aunque es una práctica no recomendada por Google, en ciertas ocasiones podemos necesitar que una aplicación esté destinada al uso exclusivo en determinados tipos de dispositivos, ya sea para un Smartphone o una Tablet. Para estos casos tenemos  la opción de restringir para qué dispositivos está destinada la aplicación a través del manifiest.xml de nuestro proyecto, utilizando la etiqueta <compatible-screens> y en su interior definir tantas pantallas como necesitemos, teniendo en cuenta que para cada tamaño de pantalla también tenemos que indicar a qué densidades queremos dar soporte.

Esto quiere decir que, si por ejemplo queremos dar soporte a pantallas de tamaño large (que hacen referencia a las tablets de 7′) en realidad deberemos indicar 4 pantallas distintas en el manifiest.xml, una por cada densidad: ldpi, mdpi, hdpi y xhdpi. Si quisieramos además dar soporte a pantallas de 10′ haríamos lo mismo con las de tamaño xlarge, con lo que el manifiest.xml contendría las siguientes etiquetas:
Leer más…

Programación Android, AsyncTask – Conectar a Internet y leer XML

android_xml
En esta ocasión vamos a desarrollar una aplicación va a conectar a Internet y va a recoger un documento XML a través de un AsynkTask, para mostrar en un ListView las últimas publicaciones del blog. En primer lugar es necesario conocer la estructura del XML que vamos a utilizar, en este caso podemos ver la estructura completa en el siguiente enlace http://www.proyectosimio.com/feed/

Como vemos, tenemos una primera etiqueta , y en su interior se encuentra el título del blog, el link, la descripción, la última modificación de algún dato, idioma, etc. En nuestro ejemplo vamos a utilizar las etiquetas , que contienen los artículos que se han publicado en el blog. Dentro de esta etiqueta vemos que existen las etiquetas y , que contienen el título del artículo y el link en el que se encuentra.

En nuestro ListView vamos a mostrar el título de la entrada, y cuando se pulse sobre una lanzaremos un Intent para que se abra el navegador y muestre el artículo deseado.
Leer más…