viernes, 9 de marzo de 2012

6.7.1.Programación en Android-Actividad de Ayuda

6.7.1.- Programación en Android – Actividad de Ayuda


En este capítulo crearemos nuestra actividad de ayuda (ActividadAyuda) que será la encargada de mostrar la ayuda del juego. En el diseño de esta actividad trabajaremos con recursos raw y además crearemos un textview con scroll, entre otras cosas.
El diseño básico que tendrá esta actividad será el siguiente:






















Y viéndolo con más detalle, tendremos que crear o alterar el layout que tenemos creado (ayuda.xml) para incluir los siguientes elementos:


























Bien, comenzamos editando el fichero ayuda.xml, y creamos un LinearLayout que será el que contenga el resto de los recursos u objetos que añadiremos. Después crearemos la cabecera, que será un RelativeLayout que contendrá las dos imágenes y el textview con el título. Lo haremos de forma similar a cuando creamos el diseño del menu.xml, con lo que no me pararé mucho en estos detalles (mirar si es necesario los anteriores capítulos). Además, añadimos la misma imagen de fondo que utilizamos para el menú para que sea utilizada en este Layout y mantener una consistencia visual.
También debemos crear una serie de recursos, que serán particulares de este layout, y otros que reciclaremos del layout creado para el menú, aunque sería mejor crear unos propios, pero así se simplifica. Los recursos que reutilizaremos son los referentes al tamaño, color, dimensión del TextView de la ayuda y de las imágenes.

Cuando esté finalizada la cabecera pasamos al TextView que mostrará el texto de ayuda, y aquí es dónde nos pararemos a ver los pasos con más detenimiento por ser nuevos.
Necesitaremos una serie de recursos de dimensión (en el fichero dimension.xml o dimen.xml dentro de la carpeta values), que serán los siguientes:

Identificador dimensión
Valor
Descripción
dim_Margen_Texto_Ayuda
20 dp
(Padding). Margen que se deja sin texto dentro del contenedor textview.
dim_Texto_Ayuda
7pt
Tamaño del texto.
dim_Desv_Texto_Ayuda
25dp
Tamaño del desvanecimiento (fading) del texto.
dim_Margen_Drawable_Texto_Ayuda
5dp
Margen que se deja para el drawable del fondo del TextView de la ayuda.

Además de estas dimensiones, vamos a crear una nueva carpeta dentro de res, esta carpeta le llamaremos raw, y contendrá recursos sin formato, en nuestro caso el texto de la ayuda.
Dentro de la carpeta raw crearemos un fichero llamado ayuda.txt, y en él escribiremos unos párrafos con la ayuda del juego, de momento podéis copiar lo siguiente:

Correcto o Incorrecto

El objetivo del juego es el de acertar el mayor número de respuestas en el mínimo tiempo.
Se te presentará una operación matemática y debes evaluar si es correcta o incorrecta pulsando el botón correspondiente.
Tienes un tiempo para responder a las preguntas, procura no equivocarte y contestar el mayor número de ellas de forma correcta.
Correo del creador: pafh.software@gmail.com

Nota: Aunque lo correcto sería crear este texto como un recurso string, ya que nos facilitaría más tarde la localización del programa además de poder utilizar etiquetas HTML, pero se hace de esta forma para ver como se trabaja con recursos raw.

Es posible que no se os muestren bien los acentos, en ese caso yo he recurrido a crear el fichero de texto con el NotePad y después lo he añadido a los recursos. Además el Notepad da la opción de guardarlo con varias codificaciones, por si queréis experimentar.

También podemos crear el fichero de texto con cualquier otro editor y copiarlo después dentro de la carpeta raw.

Podemos cambiar la apariencia del texto cambiando sus atributos mediante textStyle, con lo que lo podemos hacer en negrita o en cursiva. Además mediante el uso del atributo linksClickable (a true) y el atributo autoLink (a all) podemos hacer que se enlace automáticamente los números de teléfono, direcciones web, direcciones de email mostrados en el TextView con las aplicaciones android correspondientes (Marcador, navegador, email, etc.)

Ahora que tenemos los recursos necesarios, añadimos el textView después del RelativeLayout que va en la cabecera, y ponemos los siguientes atributos/propiedades/valores:

Propiedad
Valor
Descripción
Id
@+id/texto_de_la_ayuda
Identificador
Drawable Padding
@dimen/dim_Margen_Drawable_Texto_Ayuda
Margen que se deja para el drawable del textview.
Fading Edge
Vertical
Desvanecimiento del borde.
Fading Edge Lenght
@dimen/dim_desv_Texto_Ayuda
Tamaño del desvanecimiento.
Padding
@dimen/dim_Margen_Texto_Ayuda
Tamaño del margen desde el borde del textview hasta el texto.
Scrollbars
Vertical
Barras de desplazamiento. (Vertical y/o horizontal)
isScrollContainer
true
Indica que tiene scroll.
Scrollbar Style
outsideOverlay
En el borde de la vista y por encima.
Links clickable
true
Hace que al pinchar sobre emails, direcciones web, números de teléfono, etc., se llame a la aplicación correspondiente.
Autolink
all
Para que haga enlaces automáticamente con los números de teléfono, email, etc.
Text Color
@android:color/white
Color del texto, cogemos un recurso del sistema.
Text Size
@dimen/dim_Texto_Ayuda
Tamaño del texto.
Layout height
fill_parent
Alto de la vista/widget. (Que se ajuste al layout Padre).
Layout width
fill_parent
Ancho de la vista/widget. (Que se ajuste al layout Padre)


Accediendo a ficheros

Hay una cosa que tenemos que tener en cuenta al trabajar con los ficheros de nuestra aplicación, y es que cada aplicación de Android tiene su propio directorio privado para guardar los ficheros de la aplicación, asique además de todas las clases habituales para trabajar con ficheros (File, Stream) se puede acceder a los ficheros y carpetas privadas de la aplicación utilizando los siguientes métodos de contexto (Context): fileList(), getFilesDir(), getDir(), openFileInput(), openFileOutput(), deleteFile() y getFileStreamPath(), que nos ayudarán en caso de tener que crear ficheros o bajarlos de internet.

Ahora vamos a modificar el código de la ActividadAyuda.java.
Para leer datos de tipo string desde un fichero, podemos utilizar el método openRawResource() de la clase Resources, por ejemplo:

InputStream iFichero= getResources().openRawResource(R.raw.ayuda);

Y ahora que ya tenemos un objeto del tipo InputStream ya podemos leer el fichero línea a línea o byte a byte y crear una cadena.
En este caso se podría hacer un método como el siguiente:

private String cargarFicherodeAyuda()
{
//Por si nos da un error.
try
{
//Cargamos el fichero
InputStream iFichero = getResources().openRawResource(R.raw.ayuda);
StringBuffer sBuffer = new StringBuffer();
DataInputStream datosIO = new DataInputStream(iFichero);
String strLinea = null;
//Cargamos linea a linea el fichero.
while ((strLinea = datosIO.readLine()) != null)
{
//Y la añadimos al stringbuffer
sBuffer.append(strLinea + "\n");
}
//Se cierran los accesos.
datosIO.close();
iFichero.close();
//Si todo va bien retorna la cadena
return sBuffer.toString();
}
catch (Exception e)
{
if (VALOR_DEBUG) Log.v(LOG_GLOBAL,
"Error cargando Fichero de ayuda", e);
Log.e(LOG_GLOBAL, "Error cargando fichero de ayuda", e);
}
//En caso de tener algún error retornamos null.
return null;
}

Y lo llamaríamos desde el método onCreate de ActividadAyuda, a la que le añadiremos el siguiente código:

String texto;
texto = cargarFicherodeAyuda();
//Ahora actualizamos el control TextView con el texto
TextView tv_textoayuda = (TextView)findViewById(R.id.texto_de_la_ayuda);
tv_textoayuda.setText(texto);

Ya podemos ejecutar nuestra aplicación, y podremos ver nuestro texto de ayuda con scroll y enlaces automáticos.




Ver. 1.0 – Revisión 12/03/2012

No hay comentarios:

Publicar un comentario