Autor

Alejandro Alcalde

Data Scientist and Computer Scientist. Creator of this blog.

Más artículos de Alejandro Alcalde | Porfolio

Índice

A todos los recursos que colocamos en las subcarpetas de ./res/ se puede acceder a través de la clase R de nuestro proyecto.

Esta clase R la genera el comando aapt en una pasada anterior a la compilación (Eclipse, por defecto, la va generando continuamente conforme cambiamos los recursos). Contiene todos los identificadores de recursos para poder referenciarlos.

Al igual que la carpeta “res”, la clase R se organiza en subclases, así por ejemplo el icono que colocamos en ./res/drawable/icon tiene su correspondencia en R.drawable.icon (que es un identificador estático de tipo int y sirve para acceder al recurso).

Así pues los ID de recurso están compuestos de:

Tenemos dos formas de acceder a los recursos definidos en la clase R:

Si lo que queremos es acceder a un recurso definido por el sistema antepondremos el prefijo android:

Referenciando atributos de estilo

Cuando aplicamos estilos a nuestros layout puede interesarnos acceder a un atributo concreto de un estilo, para eso tenemos una sintaxis específica que podemos usar en nuestros XML:

?[<nombre_paquete>:][<tipo_recurso>/]<nombre_recurso>

Así por ejemplo si queremos colocar un texto pequeño usaremos:

?android:attr.textAppearanceSmall

Si queremos, también podemos utilizar nuestros propios atributos.

Primero lo definimos con un tag “attr”·dentro de ./res/values/attr.xml.

<?xml version="1.0" encoding="utf­8"?>
<resources>
     <attr name="cabecera" format="reference" />
</resources>

Ahora ya podemos usar esa propiedad en nuestros estilos:

Primero definimos un estilo de texto llamado “TituloRojo”, y luego lo aplicamos al atributo que hemos creado llamado “Cabecera”. Obsérvese que como es un atributo propio, no usamos el espacio de nombres “android:”.

Si luego quisiéramos acceder a este atributo al definir un layout podríamos usar la sintaxis mencionada:

./res/layout/milayout

<?xml version="1.0" encoding="utf­8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
<TextView
     android:layout_width="fill_parent
     android:layout_height="fill_parent"
     android:text="No hay datos disponibles"
     style="?attr/cabecera" />
</FrameLayout>

./res/values/style.xml

<?xml version="1.0" encoding="utf­8"?>
<resources>
<style name="MiTema" parent=
     "@android:style/Theme.Light">
     <item name="android:windowBackground">
     @drawable/fondo
     <item name="cabecera">
     @style/TituloRojo</item>
</style>
<style name="TituloRojo"
     parent="@android:style/TextAppearance.Large">
     <item name="android:textColor">#FF0000</item>
     <item name="android:textStyle">bold</item>
</style>
</resources>

Siguiente Tema: Programación Android: Recursos - Strings

¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.

Quizá también te interese leer...