Programación Android, Recursos XML I

Share if you like...Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0

android_resources

Localización

En anteriores entradas se ha hecho mención a recursos XML que se crean automáticamente con nuestro proyecto. Con mayor frecuencia hemos hablado del archivo que almacena los Strings que nuestra aplicación pueda necesitar. Lo que no se mencionó entonces fue que también podemos crear otros archivos “strings.xml, dentro de otras carpetas, que nos facilitan el poder traducir nuestra aplicación a diferentes idiomas.

Por ejemplo, podemos poner en este primer archivo strings.xml todos los Strings en Inglés, y posteriormente crear una carpeta values-es en la que guardar una copia del primer archivo, y traducir todos nuestros Strings al español, y dentro de otra carpeta values-fr poner otra copia, en la que los Strings estén traducidos al francés.

Haciendo esto, no tendremos que controlar el idioma que debemos mostrarle al usuario, ya que el propio sistema accede a la carpeta que corresponda, basándose en su propia configuración de idioma, para mostrar los Strings al usuario, y en el caso de que no exista la carpeta específica para dicho idioma mostrará el contenido del archivo por defecto (aquél que se nos genera automáticamente al crear el proyecto).

En Android Developers puede leerse la documentación oficial al respecto.

Pero no sólo podemos almacenar Strings en los recursos de la aplicación, también podemos guardar dimensiones, colores, estilos y shapes que necesitemos en nuestro proyecto, para que al crear nuestras vistas podamos definir los diversos campos a partir de una configuración ya establecida, con lo que conseguiremos una apariencia uniforme, sin necesidad de memorizar qué color utilizamos para un determinado componente, o qué tamaño debe tener.

A continuación vamos a mostrar un ejemplo en el que se utilizarán todos estos conceptos, para que así quede más claro su uso, y la gran ventaja que esto le da al programador.

En primer lugar vamos a crear un nuevo proyecto, y en el archivo strings.xml pondremos los siguientes valores:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Resources</string>
    <string name="action_settings">Settings</string>
    <string name="btn_shape">Shape</string>
    <string name="btn_dimens">Dimens</string>
    <string name="btn_style">Style</string>
    <string name="btn_default">Default</string>

</resources>

Como vemos, nuestros Strings están definidos en inglés, pero ahora crearemos nuestra configuración en español. Para ello, sobre la carpeta res de nuestro proyecto daremos al botón secundario del ratón, y seleccionaremos la opción New->Folder. Le pondremos el nombre value-es y aceptaremos.

Una vez creada la carpeta, daremos al botón secundario del ratón sobre el archivo strings.xml, y seleccionamos la opción copy. Ahora repetiremos el proceso sobre la carpeta que acabamos de crear, seleccionando la opción paste, y con esto tendremos una copia del archivo strings.xml en nuestra nueva carpeta. Por último sólo nos falta traducir todos los Strings:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Resources</string>
    <string name="action_settings">Ajustes</string>
    <string name="btn_shape">Shape</string>
    <string name="btn_dimens">Dimensiones</string>
    <string name="btn_style>Estilo</string>
    <string name="btn_default">Estándar</string>

</resources>

En el caso del String “app_name” no lo he traducido, porque este String hace referencia al nombre de la propia aplicación. Traducirlo o no lo haremos en función de si queremos que la aplicación tenga un nombre distinto para cada idioma o no.

Ahora veremos que el proyecto tiene un error en el xml de la vista main, debido a que por defecto nos incluye el típico “hola mundo” que aquí hemos eliminado de la lista de Strings, por lo que no encuentra la referencia. No tendremos más que borrar el TextView, que no vamos a utilizar en el proyecto.

Ya que estamos en esta vista, vamos a aprovechar para poner cuatro botones alineados verticalmente, y a cada uno de ellos le asignaremos cada uno de los Strings que hemos definido para los botones.

Definir dimensiones

Para establecer el margen con el botón superior, vamos a definir una dimensión en el archivo dimens.xml que se encuentra también en la carpeta values de nuestro proyecto. Si este archivo no existe, lo crearemos nosotros. Su contenido será:

<resources>

    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="btn_margin_top">30dp</dimen>

</resources>

Y ahora en la propiedad android:layout_marginTop de nuestros botones le daremos el valor @dimen/btn_margin_top. El XML de nuestra vista debería quedar parecido a:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity&quot; >

    <Button
        android:id="@+id/btnDefault"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="@dimen/btn_margin_top"
        android:text="@string/btn_default" />

    <Button
        android:id="@+id/btnShape"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnDefault"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="@dimen/btn_margin_top"
        android:text=";@string/btn_shape" />

    <Button
        android:id="@+id/btnStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnDimens"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="@dimen/btn_margin_top"
        android:text="@string/btn_style" />

    <Button
        android:id="@+id/btnDimens"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnShape"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="@dimen/btn_margin_top"
        android:text="@string/btn_dimens" />

</RelativeLayout>

Y la apariencia quedaría así:
ResourcesMain

Con esto tendremos un margen superior estándar para todos los botones, y un lenguaje por defecto en inglés para nuestra aplicación, pero en el caso de que el terminal esté configurado en español nuestra aplicación también se podrá ver en español.

En una siguiente entrada continuaremos con la creación de un estilo y un shape para los botones.

Descargas

Puedes ver el resultado del ejemplo en tu móvil descargando nuestra aplicación desde Google Play.

Share if you like...Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0
The following two tabs change content below.
Reborn as IT Developer. Desarrollador Android y fundador de Proyecto Simio. "En realidad, yo no puedo enseñar nada a nadie, sólo puedo hacerles pensar." - Sócrates.

Deja un comentario