Como utilizar formato HTML en textos

Objetivo:

Utilizar HTML para obtener textos formateados en nuestra aplicación Android.

Hay situaciones en las programando en Android, tenemos un texto HTML y deseamos incluirlo en nuestra aplicación, aprovechando el formato que tiene.

En esas situaciones, podemos llamar al paquete android.text.html, dejando que él actúe sobre nuestro texto, aplicando la vista indicadas en las etiquetas que le dan formato.

Vamos a crear una mini-aplicación para dar formato HTML al texto que se encuentra en un aviso (Alert). Para ello, debemos crear una aplicación desde el principio, saber como crear un AlertDialog (aunque en el enlace se muestra como hacerlo junto con XML y aquí lo crearemos con Java directamente), y finalmente llamar a la clase android.text.html.

Vemos una captura de la mini-aplicación:

TutorialAndroid - Ejemplo escribir en HTML

Y a continuación mostramos el texto comentado:

Código fuente Java:

[sourcecode language=”java”]
package com.htmlenalertas.tutorialandroid;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.text.Html;

public class HTMLenAlertActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder alertWithHTML=new AlertDialog.Builder(HTMLenAlertActivity.this);
alertWithHTML.setMessage(Html.fromHtml("<font color=#fff000> Escribo esto en HTML! "+"</font><br><strong>tutorialandroid.com</strong>"));
alertWithHTML.setPositiveButton("ok", null);
alertWithHTML.show();
}
}
[/sourcecode]

Descárgate el código aquí

Motores de desarrollo para juegos 2D o 3D

Dado el creciente número de motores de desarrollo para juegos en Android que están circulando por la red, vamos a nombrar varios de ellos, para juegos 2D y 3D, de código abierto.

Comentad los que más os gusten ;)

1. Rokon – Motor de desarrollo de código abierto para juegos en 2D sobre Android
Rokon es de código abierto (licencia BSD), para creación de juegos OpenGL en dos dimensiones, potente y flexible. Rokon ha sido reescrito desde cero. Muchas más características están integradas, y tiene vistas de hacer méritos en un futuro no muy lejano. Ejemplos, tutoriales y documentación están disponibles para todos. Con la ayuda de libgdx y Box2D los desarrolladores del proyecto te obsequian con un motor completo, detallado, escrito en código nativo.

Webs del proyecto: http://rokonandroid.com/ y http://code.google.com/p/rokon/

2. Libgdx – Marco de desarrollo (framework) de juegos Android
Libgdx es un proyecto de código abierto Android, basado en una librería de juegos multi-plataforma de desarrollo en Java. Permite crear prototipos y desarrollar una aplicación. Se puede empezar con tan sólo 6 líneas de código.

Web del proyecto: http://code.google.com/p/libgdx/

3. Android-2D-Engine – Motor de desarrollo para juegos 2D sobre Android en c + + / Java
Android-2D-Engine es un proyecto de código abierto para juegos 2D sobre Android todavía en construcción, el proyecto nacido para servir de base para los juegos. En realidad hay dos proyectos:
trunk / bullet: Contiene el código fuente C++. Este código no es realmente necesario ya que la muestra contiene la librería compilada.
trunk / androgine: Contiene el resto del código necesario para las comunicaciones, además de una muestra con fines de perfiles.

Web del proyecto: http://code.google.com/p/android-2d-engine/

4. AndEngine – Entorno de desarrollo Android para juegos OpenGL 2D
Las características principales incluyen:
* Android optimizado
* Compatibilidad con Android 1.6
* SplitScreen
* Red Multijugador
* Live Wallpapers
* MultiTouch
* Box2D

Web del proyecto: http://code.google.com/p/andengine/

5. Angle – Motor GL Android
Angle es otro motor de desarrollo para juegos 2D con OpenGL destinado a Android. El motor está completamente codificado en java, por lo que puede usar todos los objetos para su conveniencia. Con el motor se incluyen una serie de tutoriales que muestran cómo usarlo.

Web del proyecto: http://code.google.com/p/angle/

6. jPCT-AE: Un motor de 3D gratis para Android
jPCT es un motor 3D gratis, pequeño, rápido y fácil de aprender para Java. Ofrece soporte para el software y el uso de hardware. jPCT ofrece las características necesarias para escribir juegos en tres dimensiones o aplicación en Java en un corto período de tiempo.

Web del proyecto: http://www.jpct.net/jpct-ae/

7. Dwarf-fw: Marco de desarrollo (framework) Android 3D
Dwarf-FW, de código abierto, es un marco / motor de desarrollo para juegos, con uso de OpenGL ES. Está desarrollado para funcionar con el teléfono Android Dev 1 que cuenta con un acelerómetro, magnetómetro, pantalla táctil y rueda de desplazamiento. Algunas de las características actuales:
* Animaciones de fotogramas clave (sin transformación)
* Picking
* OBJ importador
* Binario importador / exportador
* Iluminación
* Materiales
* Filtrado simple de sensores
* VBO soporte

Web del proyecto: http://code.google.com/p/dwarf-fw/

8. YoghurtGum – Multiplataforma C + + 2D, motor para dispositivos móviles
El proyecto de código abierto YoghurtGum es un motor 2Dque pretende hacer el desarrollo de juegos en dispositivos móviles sea fácil, divertido y rápido. Actualmente YoghurtGum está siendo desarrollado para Android, y pronto para Windows Mobile 6. En Android se utiliza OpenGL para hacer cosas en la pantalla mientras que en Windows Mobile 6 se usará DirectX.
Inicio del proyecto: http://code.google.com/p/yoghurtgum/

9. Forget3D: Un marco de OpenGL ES
Forget3D (OpenGL ES A Framework) es un marco de OpenGL ES (todavía no es un motor) para Android, Win32, WinCE plataforma, y simplifica su programa de desarrollo de OpenGL ES, gestión de escenas de apoyo, la textura, la cámara , Luz, modelo de cargador, fuente, etc.

Web del proyecto: http://code.google.com/p/forget3d/

10. Mages Game Engine
Mages Game Engine permite desarrollar eficaz multijugador cliente / servidor de juegos de internet para dispositivos móviles con el mínimo esfuerzo.
Permite a los desarrolladores para crear juegos multijugador por internet mediante la aplicación de la lógica e interfaz gráfica de usuario mediante el uso de API del motor de gran alcance. Se puede realizar tareas comunes juego como acceso al servidor del juego, la recuperación de la lista de jugadores activos, la lista de sesiones de juego disponibles, crear nueva sesión de juego, unirse a juegos existentes, invitar a otros jugadores, charlar con los oponentes y muchas otras características.

11. JMonkey Engine Motor de desarrollo Java, OpenGL
Realiza juegos en modernas plataformas. Programación en Java, en un tiempo record puedes tener tu juego en el mercado, desarrollado sin limitaciones.

Web del proyecto: http://jmonkeyengine.com/

Como pasar datos a otra Activity

Objetivo:

Pasar información de una a otra Activity.

Como siempre, tendremos varias alternativas para compartir datos entre las actividades de nuestra aplicación. En este post vamos a tratar una de las más simples: mediante objetos Bundle.

Esta no es la mejor alternativa si deseamos que la información permanezca en un futuro (tras cerrar la aplicación por ejemplo): en ese caso guardarlo en base de datos sería más útil.

Veamos un ejemplo rápido del uso de la clase Bundle. Pasaremos información de una actividad padre a una hija. El código pertenece a Cartelera de Cine, disponible en Android Market, y se pretende pasar la información de una lista de cines y películas de una actividad a otra :

Código fuente java Activity padre:

[sourcecode language=”java”]
//…
//variables que pasaremos a la activity hija
private List<Cine> lista_cines;
private List<Pelicula> lista_peliculas;
//…
/**
* Pasamos dichas variables a la activity hija, llamándola
*/
public void pasarActividadHija(){
//preparo la Intent
Intent itemintent = new Intent(this,activity_hija.class);
//paso la lista de peliculas y cines
itemintent.putExtra("lista_peliculas",(Serializable) this.lista_peliculas);
itemintent.putExtra("lista_cines",(Serializable) this.lista_cines);
//llamamos a la subactividad
startActivityForResult(itemintent, 0);
}
[/sourcecode]

La Activity hija recoge las listas pasadas por la Activity padre. En el método onCreate llamaremos a la función importarInformacion, la cual se encarga de ello:

Código fuente java Activity hija:

[sourcecode language=”java”]
//…
private List<Cine> lista_cines;
private List<Pelicula> lista_peliculas;
//…
/**
* importa la info de que le pasa la Actividad padre
*/
public void importarInformacion(){
Intent startingIntent = getIntent();
if (startingIntent != null) {
Bundle b = startingIntent.getBundleExtra("android.intent.extra.INTENT");
//recibimos la lista de cines
this.lista_cines = (List<Cine>)getIntent().getSerializableExtra("lista_cines");
//recibimos la lista de peliculas
this.lista_peliculas = (List<Pelicula>)getIntent().getSerializableExtra("lista_peliculas");
}
[/sourcecode]

Si lo que deseamos es compartir cadenas de texto, la clase Bundle posee métodos especiales: putString para meter en la instancia del Bundle la cadena (en la Activity padre), y getString para recuperarla (en la Activity hija)

Como dar estilo: color, sombras, tamaño a un texto Textview

Objetivo:

Dar formato (color, sombreado, tamaño) a un texto (Textview).

Es importante tener nuestros textos correctamente formateados, para ganar visualización en nuestra aplicación.

Se pueden realizar formatos tanto en Java como en XML, pero presentaremos el segundo caso, para continuar nuestra filosofía en la web de separar vista-controlador entre estos dos lenguajes.

A continuación se muestra la captura de pantalla de Cartelera de Cine, una aplicación Android disponible en Android Market. El nombre de la ciudad es un TextView formateado mediante el XML, que se muestra más abajo. Id variando los diferentes valores mostrados hasta alcanzar el nivel de sombras, color,etc deseado:

Captura_cartelera_de_cine

Código fuente XML:

[sourcecode language=”xml”]
<TextView android:id="@+id/cartelera_texto_ciudad"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="" android:textSize="30sp" android:textStyle="bold"
android:textColor="#000000" android:shadowColor="#8a6603"
android:shadowDx="3" android:shadowDy="2" android:shadowRadius="1.8"
/>
[/sourcecode]

Dicho código pertenece al texto en…Madrid

Como limitar texto en un EditText

Objetivo:

Limitar el número de caracteres que se puedan escribir en un EditText.

Cuando creamos formularios, hay ocasiones en que debemos limitar el número de caracteres que un usuario introduzca en un EditText.

Una forma simple de hacerlo es utilizando la propiedad maxLenght de dichos campos en el fichero XML:

Código fuente XML:

[sourcecode language=”xml”]
android:maxLength="10"
[/sourcecode]

Dicho código limita a 10 el número de caracteres que se pueden introducir.