Compartir a través de


Conceptos básicos de los recursos de Android

Casi todas las aplicaciones Android tendrán algún tipo de recursos en ellas; como mínimo, suelen tener los diseños de la interfaz de usuario en forma de archivos XML. Cuando se crea una aplicación de Xamarin.Android por primera vez, la plantilla de proyecto de Xamarin.Android configura los recursos predeterminados:

Los cinco archivos que componen los recursos predeterminados se crearon en la carpeta Resources:

  • Icon.png: el icono predeterminado de la aplicación

  • Main.axml: archivo de diseño predeterminado de la interfaz de usuario para una aplicación. Tenga en cuenta que mientras Android usa la extensión de archivo .xml, Xamarin.Android usa la extensión de archivo .axml.

  • Strings.xml: una tabla de cadenas que ayuda con la localización de la aplicación

  • AboutResources.txt: este elemento no es necesario y puede eliminarse de forma segura. Solo proporciona información general de alto nivel de la carpeta Resources y los archivos que contiene.

  • Resource.designer.cs: Xamarin.Android genera y mantiene automáticamente este archivo y contiene el identificador único asignado a cada recurso. Esto es muy similar, e idéntico en su propósito, al archivo R.java que tendría una aplicación Android escrita en Java. Las herramientas de Xamarin.Android lo crean automáticamente y se volverá a generar de vez en cuando.

Creación y acceso a recursos

La creación de recursos es tan simple como agregar archivos al directorio para el tipo de recurso en cuestión. La captura de pantalla siguiente muestra los recursos de cadena para las configuraciones regionales alemanas que se agregaron a un proyecto. Cuando Strings.xml se agregó al archivo, la acción de compilación se estableció automáticamente en AndroidResource por las herramientas de Xamarin.Android:

Esto permite que las herramientas de Xamarin.Android compilen e inserten correctamente los recursos en el archivo APK. Si por algún motivo la acción de compilación no se establece en Recurso de Android, los archivos se excluirán del APK y cualquier intento de cargar o acceder a los recursos producirá un error en tiempo de ejecución y la aplicación se bloqueará.

Además, es importante tener en cuenta que, aunque Android solo admite nombres de archivo en minúsculas para los elementos de recursos, Xamarin.Android es un poco más indulgente; admitirá nombres de archivo tanto en mayúsculas como en minúsculas. La convención para los nombres de imagen es usar minúsculas con caracteres de subrayado como separadores (por ejemplo, mi_nombre_imagen.png). Tenga en cuenta que los nombres de recursos no se pueden procesar si se usan guiones o espacios como separadores.

Cuando se han agregado recursos a un proyecto, hay dos maneras de usarlos en una aplicación: mediante programación (dentro del código) o desde archivos XML.

Referencia a recursos mediante programación

Para acceder a estos archivos mediante programación, se les asigna un identificador de recurso único. Este identificador de recurso es un entero definido en una clase especial denominada Resource, que se encuentra en el archivo Resource.designer.cs y tiene un aspecto similar al siguiente:

public partial class Resource
{
    public partial class Attribute
    {
    }
    public partial class Drawable {
        public const int Icon=0x7f020000;
    }
    public partial class Id
    {
        public const int Textview=0x7f050000;
    }
    public partial class Layout
    {
        public const int Main=0x7f030000;
    }
    public partial class String
    {
        public const int App_Name=0x7f040001;
        public const int Hello=0x7f040000;
    }
}

Cada identificador de recurso se encuentra dentro de una clase anidada que corresponde al tipo de recurso. Por ejemplo, cuando el archivo Icon.png se agregó al proyecto, Xamarin.Android actualizó la clase Resource, creando una clase anidada llamada Drawable con una constante dentro denominada Icon. Esto permite hacer referencia al archivo Icon.png en el código como Resource.Drawable.Icon. La clase Resource no se debe editar manualmente, ya que Xamarin.Android sobrescribirá los cambios realizados en ella.

Al hacer referencia a recursos mediante programación (en el código), se puede acceder a ellos a través de la jerarquía de la clase Resources, que utiliza la sintaxis siguiente:

[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName: el paquete que proporciona el recurso y solo es necesario cuando se usan recursos de otros paquetes.

  • ResourceType: es el tipo de recurso anidado que se encuentra en la clase Resource descrita anteriormente.

  • Nombre del recurso: este es el nombre de archivo del recurso (sin la extensión) o el valor del atributo android:name para los recursos que se encuentran en un elemento XML.

Referencia a recursos desde XML

Se accede a los recursos de un archivo XML mediante una sintaxis especial:

@[<PackageName>:]<ResourceType>/<ResourceName>
  • PackageName: el paquete que proporciona el recurso y solo es necesario cuando se usan recursos de otros paquetes.

  • ResourceType: es el tipo de recurso anidado que se encuentra dentro de la clase Resource.

  • Nombre del recurso: es el nombre de archivo del recurso (sin la extensión de tipo de archivo) o el valor del atributo android:name para los recursos que se encuentran en un elemento XML.

Por ejemplo, el contenido del archivo de diseño Main.axml es el siguiente:

<?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">
    <ImageView android:id="@+id/myImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/flag" />
</LinearLayout>

Este ejemplo tiene un elemento ImageView que requiere un recurso Drawable denominado flag. El elemento ImageView tiene su atributo src establecido en @drawable/flag. Cuando se inicia la actividad, Android buscará dentro del directorio Resource/Drawable un archivo denominado flag.png (la extensión de archivo podría ser otro formato de imagen, como flag.jpg) y cargará ese archivo y lo mostrará en ImageView. Cuando se ejecuta esta aplicación, puede tener un aspecto similar a la siguiente imagen:

Localized ImageView