Android
13.RECURSOS
Página 15 de 25
13. RECURSOS
Se llaman resources a los recursos (como las constantes String, ficheros de imágenes o sonido, etc.) que pueden ser especificados fuera del código Java. Los recursos se almacenan en el directorio res del proyecto. Ejemplos de recursos son los ficheros xml, localizados en el directorio res/layout, usados para especificar el layout, y que nosotros hemos utilizado también para introducir constantes de tipo String, nombres de ficheros de imágenes, etcétera.
13.1. El recurso string
Ilustraremos aquí el uso del recurso @string. El símbolo @ indica que el nombre que le sigue es un recurso, almacenado en un fichero. Los recursos @string se almacenan en el fichero res/values/strings.xml. Nótese que el nombre del fichero termina en “s”, mientras que el del recurso no. Este fichero es siempre creado por Eclipse automáticamente al crear un nuevo proyecto, conteniendo las definiciones de dos cadenas: hello (la cadena que contiene el texto “Hello Android” y app_name (que contiene el nombre de la aplicación).
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello Android</string>
<string name="app_name">Hello Android</string>
</resources>
A este fichero se le puede añadir el contenido de cualquier cadena que se utilice luego en el layout o en el programa Java. Esto permite cambiar fácilmente los contenidos de las cadenas de texto sin necesidad de modificar el programa ni el layout, por ejemplo para variar el idioma. Además este recurso admite escribir código HTML simple para modificar la apariencia del texto.
Esto se ilustra en el siguiente ejemplo. Creamos un nuevo proyecto Android y, en el fichero strings.xml, incluimos la definición de una cadena llamada html1 conteniendo algunos comandos HTML:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, RecursoStringActivity!
</string>
<string name="app_name">RecursoString</string>
<string name="html1">
<font size="24">
Este contenido ha sido definido en el fichero de recursos
<i>strings.xml</i>.
Se pueden escribir <b>comandos HTML simples para formato
del texto.</b>
</font>
<font size="18">Se permite el comando font para cambiar
el tamaño de la fuente.
Esta tiene tamaño 18.</font>
<font size="15"> Esta tiene tamaño 15.</font>
<font color="00ff00">No Se permite font para cambiar el
color.</font>
<p>Tampoco se puede iniciar un nuevo párrafo.</p>
<h1>Ni poner encabezamientos</h1>
</string>
</resources>
Figura 13.1. Utilizando recursos string en un layout
para escribir comandos HTML.
En el fichero main.xml añadimos un TextView con una referencia @string/html1 a la cadena anterior.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>
<TextView
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<TextView
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/html1"
/>
</LinearLayout>
13.2. El recurso color
De la misma forma, se pueden definir los colores típicos de la aplicación en el fichero de recursos res/values/colors.xml. En el siguiente ejemplo definimos un color para el fondo y cuatro colores para el texto:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="backgroundColor">#FFFFFF</color>
<color name="textColor1">#000000</color>
<color name="textColor2">#FF0000</color>
<color name="textColor3">#0000FF</color>
<color name="textColor4">#EEEE00</color>
</resources>
Para referenciar uno de estos recursos en el fichero main.xml usamos su nombre precedido por @color/:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/backgroundColor"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:textColor="@color/textColor1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Uso del recurso @color en colors.xml"
/>
<TextView
android:textColor="@color/textColor1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Texto de color textColor1"
/>
<TextView
android:textColor="@color/textColor2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Texto de color textColor2"
/>
<TextView
android:textColor="@color/textColor3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Texto de color textColor3"
/>
<TextView
android:textColor="@color/textColor4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Texto de color textColor4"
/>
</LinearLayout>
El resultado se presenta en la figura 13.2.
Figura 13.2. Utilizando recursos de color en un layout.
13.3. Usando recursos en un Layout
En el siguiente ejemplo veremos cómo se usa el recurso string en un layout. En este caso el recurso nos es útil para poder escribir sub-índices y super-índices en HTML. Creamos una nueva actividad HandroidPhysics y modificamos el fichero strings.xml de la siguiente forma:
strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">
<b>Interacción Neutrón-Protón</b>
</string>
<string name="potential">
V(<b>r</b>)=\u03a3<sub>i</sub>
\u03bb<sub>i</sub>/2\u03bc
\u03b4(r-R<sub>i</sub>)
(Pulse para ajustar \u03bb<sub>i</sub> y R<sub>i</sub>)
</string>
<string name="botonHe"><b>C)</b> <sup>4</sup>He</string>
<string name="Emax">E<sub>max</sub>(MeV)</string>
<string name="lambda0">
\u03bb <sub> 0 </sub> (fm)<sup>-1</sup>
</string>
<string name="R0"> R <sub> 0 </sub> (fm)</string>
<string name="lambda1">
\u03bb <sub> 1 </sub> (fm)<sup>-1</sup>
</string>
<string name="R1"> R <sub> 1 </sub> (fm)</string>
<string name="S0"><b>A)</b><sup>1</sup>S<sub>0</sub>
</string>
<string name="S1"><b>B)</b> <sup>3</sup>S<sub>1</sub>
</string>
<string name="app_name">HandroidPhysics</string>
<string name="tolerancia">Tolerancia</string>
<string name="resolucion">Resolución</string>
</resources>
Los colores están definidos en el fichero res/values/colors.xml siguiente:
colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="backgroundColor">#FFFFAA</color>
<color name="textColor">#000000</color>
<color name="lineColor">#aa0000</color>
</resources>
Finalmente, el layout está definido en el siguiente fichero main.xml. Cada cadena se referencia por su nombre, precedido por el tipo de recurso, en este caso string o color.
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/backgroundColor"
android:stretchColumns="*"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10sp"
>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<TableRow>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/S0">
</Button>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/S1">
</Button>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/botonHe">
</Button>
</TableRow>
<TextView></TextView>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/potential"
/>
<View android:background="@color/lineColor"
android:layout_height="1sp">
</View>
<TextView></TextView>
<TableRow android:padding="3sp">
<EditText
android:id="@+id/R00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1"
/>
<EditText
android:id="@+id/R10"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1"
/>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/R0"
/>
</TableRow>
<TableRow >
<EditText
android:id="@+id/lambda00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="0.0"
/>
<EditText
android:id="@+id/lambda10"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="0.0"
/>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/lambda0"
/>
</TableRow>
<TableRow android:padding="3sp">
<EditText
android:id="@+id/R01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1.99"
/>
<EditText
android:id="@+id/R11"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1.53"
/>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/R1"
/>
</TableRow>
<TableRow >
<EditText
android:id="@+id/lambda01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="-0.46"
/>
<EditText
android:id="@+id/lambda11"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="-0.91"
/>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/lambda1"
/>
</TableRow>
<TableRow android:padding="3sp">
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/Emax"
/>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/tolerancia"
/>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/resolucion"
/>
</TableRow>
<TableRow>
<EditText
android:id="@+id/Emax"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="100"
/>
<EditText
android:id="@+id/tolerancia"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="0.5"
/>
<EditText
android:id="@+id/resolucion"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1.e-5"
/>
</TableRow>
<TextView
android:textColor="@color/textColor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="J.E. Amaro, 2011"
/>
</TableLayout>
El ejemplo se puede examinar en la figura 13.3. También vemos aquí cómo añadir ciertos efectos de formato en un layout. Insertando un TextView vacío se produce un espacio vertical. Insertando un View de un color y anchura se dibuja una línea horizontal. Este layout será el punto de partida de la aplicación HandroidPhysics que se presenta en el apéndice C.
Figura 13.3. Utilizando recursos en un layout incluyendo
sub-índices y super-índices.