Mais tipos de recursos

Esta página define mais tipos de recursos que você pode externalizar, incluindo:

Booleano
Recurso XML que carrega um valor booleano.
Cor
Recurso XML que carrega um valor de cor (uma cor hexadecimal).
Dimensão
Recurso XML que carrega um valor de dimensão (com uma unidade de medida).
ID
Recurso XML que fornece um identificador exclusivo para recursos e componentes do aplicativo.
Número inteiro
Recurso XML que carrega um valor inteiro.
Matriz de números inteiros
Recurso XML que fornece uma matriz de números inteiros.
Matriz tipada
Recurso XML que fornece um TypedArray (que você pode usar para uma matriz de drawables).

Booleano

Um valor booleano definido em XML.

Observação: um booleano é um recurso simples que é referenciado usando o valor fornecido no atributo name (não no nome do arquivo XML). Dessa forma, você pode combinar recursos booleanos com outros recursos simples em um arquivo XML, em um elemento <resources>.

localização do arquivo:
res/values/filename.xml
O nome do arquivo é arbitrário. O name do elemento <bool> será usado como o ID do recurso.
referência de recurso:
Em Java: R.bool.bool_name
Em XML: @[package:]bool/bool_name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool
            name="bool_name"
            >[true | false]</bool>
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<bool>
Um valor booleano: true ou false.

atributos:

name
String. Um nome para o valor booleano. Isso será usado como o ID do recurso.
exemplo:
Arquivo XML salvo em res/values-small/bools.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="screen_small">true</bool>
        <bool name="adjust_view_bounds">true</bool>
    </resources>
    

Este código do aplicativo recupera o booleano:

Kotlin

    val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)
    

Java

    Resources res = getResources();
    boolean screenIsSmall = res.getBoolean(R.bool.screen_small);
    

Este XML de layout usa o booleano para um atributo:

    <ImageView
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:src="@drawable/logo"
        android:adjustViewBounds="@bool/adjust_view_bounds" />
    

Cor

Um valor de cor definido em XML. A cor é especificada com um valor RGB e um canal Alfa. Você pode usar um recurso de cor em qualquer lugar que aceite um valor de cor hexadecimal. Você também pode usar um recurso de cor quando um recurso drawable é esperado em XML (por exemplo, android:drawable="@color/green").

O valor sempre começa com um caractere cerquilha (#) seguido pela informação Alpha-Red-Green-Blue em um dos seguintes formatos:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

Observação: uma cor é um recurso simples que é referenciado usando o valor fornecido no atributo name (não no nome do arquivo XML). Dessa forma, você pode combinar os recursos de cor com outros recursos simples em um arquivo XML, em um elemento <resources>.

localização do arquivo:
res/values/colors.xml
O nome do arquivo é arbitrário. O name do elemento <color> será usado como o ID do recurso.
referência de recurso:
Em Java: R.color.color_name
Em XML: @[package:]color/color_name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color
            name="color_name"
            >hex_color</color>
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<color>
Uma cor expressa em hexadecimal, conforme descrito acima.

atributos:

name
String. Um nome para a cor. Isso será usado como o ID do recurso.
exemplo:
Arquivo XML salvo em res/values/colors.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
       <color name="opaque_red">#f00</color>
       <color name="translucent_red">#80ff0000</color>
    </resources>
    

Este código do aplicativo recupera o recurso de cor:

Kotlin

    val color: Int = resources.getColor(R.color.opaque_red)
    

Java

    Resources res = getResources();
    int color = res.getColor(R.color.opaque_red);
    

Este XML de layout aplica a cor a um atributo:

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/translucent_red"
        android:text="Hello"/>
    

Dimensão

Um valor de dimensão definido em XML. Uma dimensão é especificada com um número seguido por uma unidade de medida. Por exemplo: 10 px, 2 pol, 5 sp. As seguintes unidades de medida são compatíveis com o Android:

dp
Pixel de densidade independente: unidade abstrata que é baseada na densidade física da tela. Essas unidades são relativas a uma tela de 160 pontos por polegada (DPI, na sigla em inglês), em que 1 dp é, aproximadamente, igual a 1 px. Quando estiver sendo executado em uma tela de densidade mais alta, o número de pixels usado para desenhar 1 dp será aumentado por um fator apropriado para o DPI da tela. Da mesma forma, quando uma tela de densidade menor for usada, o número de pixels usados para 1 dp será diminuído. A proporção de dp para pixels será alterada com a densidade da tela, mas não necessariamente em uma proporção direta. Usar unidades dp (em vez de unidades px) é uma solução simples para fazer com que as dimensões de visualização do seu layout sejam redimensionadas corretamente para diferentes densidades de tela. Em outras palavras, elas oferecem consistência para tamanhos dos seus elementos de IU no mundo real em diferentes dispositivos.
sp
Pixel de escala independente: trata-se de uma unidade como a unidade dp, mas também é dimensionada pela preferência do usuário pelo do tamanho da fonte. Recomenda-se usar essa unidade ao especificar os tamanhos da fonte, para que sejam ajustados para a densidade da tela e para a preferência do usuário.
pt
Pontos: 1/72 de polegada com base no tamanho físico da tela, supondo uma tela de densidade de 72 DPI.
px
Pixels: corresponde aos pixels reais na tela. Essa unidade de medida não é recomendada porque a representação real pode variar entre os dispositivos. Cada dispositivo pode ter um número diferente de pixels por polegada e pode ter mais ou menos pixels totais disponíveis na tela.
mm
Milímetros: com base no tamanho físico da tela.
in
Polegadas: com base no tamanho físico da tela.

Observação: uma dimensão é um recurso simples que é referenciado usando o valor fornecido no atributo name (e não no nome do arquivo XML). Dessa forma, você pode combinar recursos de dimensão com outros recursos simples em um arquivo XML, em um elemento <resources>.

localização do arquivo:
res/values/filename.xml
O nome do arquivo é arbitrário. O name do elemento <dimen> será usado como o ID do recurso.
referência de recurso:
Em Java: R.dimen.dimension_name
Em XML: @[package:]dimen/dimension_name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen
            name="dimension_name"
            >dimension</dimen>
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<dimen>
Uma dimensão, representada por um flutuante, seguida por uma unidade de medida (dp, sp, pt, px, mm, pol), conforme descrito acima.

atributos:

name
String. Um nome para a dimensão. Isso será usado como o ID do recurso.
exemplo:
Arquivo XML salvo em res/values/dimens.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen name="textview_height">25dp</dimen>
        <dimen name="textview_width">150dp</dimen>
        <dimen name="ball_radius">30dp</dimen>
        <dimen name="font_size">16sp</dimen>
    </resources>
    

Este código do aplicativo recupera uma dimensão:

Kotlin

    val fontSize: Float = resources.getDimension(R.dimen.font_size)
    

Java

    Resources res = getResources();
    float fontSize = res.getDimension(R.dimen.font_size);
    

Este XML de layout aplica dimensões a atributos:

    <TextView
        android:layout_height="@dimen/textview_height"
        android:layout_width="@dimen/textview_width"
        android:textSize="@dimen/font_size"/>
    

ID

Um ID exclusivo de recurso definido em XML. Usando o nome que você fornece no elemento <item>, as Ferramentas para Desenvolvedores Android criam um número inteiro exclusivo na R.java classe do projeto que pode ser usado como um identificador para recursos de aplicativo (por exemplo, um View no seu layout de IU) ou um número inteiro exclusivo para ser usado no código do seu aplicativo (por exemplo, como um ID para uma caixa de diálogo ou um código de resultado).

Observação: um ID é um recurso simples que é referenciado usando o valor fornecido no atributo name (não no nome do arquivo XML). Dessa forma, você pode combinar recursos de ID com outros recursos simples em um arquivo XML em um elemento <resources>. Além disso, lembre-se de que um ID de recurso não faz referência a um item de recurso real. É simplesmente um ID exclusivo que você pode anexar a outros recursos ou usar como um número inteiro exclusivo em seu aplicativo.

localização do arquivo:
res/values/filename.xml
O nome do arquivo é arbitrário.
referência de recurso:
Em Java: R.id.name
Em XML: @[package:]id/name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item
            type="id"
            name="id_name" />
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<item>
Define um ID exclusivo. Não tem valor, apenas atributos.

atributos:

type
Precisa ser "id".
name
String. Um nome exclusivo para o ID.
exemplo:

Arquivo XML salvo em res/values/ids.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item type="id" name="button_ok" />
        <item type="id" name="dialog_exit" />
    </resources>
    

Então, esse snippet de layout usa o ID "button_ok" para um widget de botão:

    <Button android:id="@id/button_ok"
        style="@style/button_style" />
    

Observe que o valor android:id não inclui o sinal de adição na referência do ID, porque o ID já existe, como definido no exemplo ids.xml acima. Quando você especifica um ID para um recurso XML usando o sinal de adição, no formato android:id="@+id/name", significa que o "nome" do ID não existe e precisa ser criado.

Como outro exemplo, o snippet de código a seguir usa o ID "dialog_exit" como um identificador exclusivo para uma caixa de diálogo:

Kotlin

    showDialog(R.id.dialog_exit)
    

Java

    showDialog(R.id.dialog_exit);
    

No mesmo aplicativo, o ID "dialog_exit" é comparado ao criar uma caixa de diálogo:

Kotlin

    override fun onCreateDialog(id: Int): Dialog? {
        return when(id) {
            R.id.dialog_exit -> {
                ...
            }
            else -> {
                null
            }
        }
    }
    

Java

    protected Dialog onCreateDialog(int id) {
        Dialog dialog;
        switch(id) {
        case R.id.dialog_exit:
            ...
            break;
        default:
            dialog = null;
        }
        return dialog;
    }
    

Número inteiro

Um número inteiro definido em XML.

Observação: um número inteiro é um recurso simples que é referenciado usando o valor fornecido no atributo name (não no nome do arquivo XML). Dessa forma, você pode combinar recursos de números inteiros com outros recursos simples em um arquivo XML, em um elemento <resources>.

localização do arquivo:
res/values/filename.xml
O nome do arquivo é arbitrário. O name do elemento <integer> será usado como o ID do recurso.
referência de recurso:
Em Java: R.integer.integer_name
Em XML: @[package:]integer/integer_name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer
            name="integer_name"
            >integer</integer>
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<integer>
Um número inteiro.

atributos:

name
String. Um nome para o número inteiro. Isso será usado como o ID do recurso.
exemplo:

Arquivo XML salvo em res/values/integers.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer name="max_speed">75</integer>
        <integer name="min_speed">5</integer>
    </resources>
    

Este código do aplicativo recupera um número inteiro:

Kotlin

    val maxSpeed: Int = resources.getInteger(R.integer.max_speed)
    

Java

    Resources res = getResources();
    int maxSpeed = res.getInteger(R.integer.max_speed);
    

Matriz de números inteiros

Uma matriz de números inteiros definida em XML.

Observação: uma matriz de números inteiros é um recurso simples que é referenciado usando o valor fornecido no atributo name (não no nome do arquivo XML). Dessa forma, você pode combinar recursos de matriz de números inteiros com outros recursos simples em um arquivo XML, em um elemento <resources>.

localização do arquivo:
res/values/filename.xml
O nome do arquivo é arbitrário. O name do elemento <integer-array> será usado como o ID do recurso.
tipo de dados do recurso compilado:
Ponteiro de recurso para uma matriz de números inteiros.
referência de recurso:
Em Java: R.array.integer_array_name
Em XML: @[package:]array.integer_array_name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer-array
            name="integer_array_name">
            <item
                >integer</item>
        </integer-array>
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<integer-array>
Define uma matriz de números inteiros. Contém um ou mais elementos <item> filhos.

atributos:

android:name
String. Um nome para a matriz. Esse nome será usado como o ID do recurso para fazer referência à matriz.
<item>
Um número inteiro. O valor pode ser uma referência a outro recurso de número inteiro. Precisa ser um filho de um elemento <integer-array>.

Nenhum atributo.

exemplo:
Arquivo XML salvo em res/values/integers.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer-array name="bits">
            <item>4</item>
            <item>8</item>
            <item>16</item>
            <item>32</item>
        </integer-array>
    </resources>
    

Este código do aplicativo recupera a matriz de números inteiros:

Kotlin

    val bits: IntArray = resources.getIntArray(R.array.bits)
    

Java

    Resources res = getResources();
    int[] bits = res.getIntArray(R.array.bits);
    

Matriz tipada

Um TypedArray definido em XML. Você pode usá-lo para criar uma matriz de outros recursos, como drawables. Observe que a matriz não é obrigatoriamente homogênea, portanto, você pode criar uma matriz de tipos de recursos mistos, mas precisa estar ciente dos tipos de dados e onde eles estão na matriz para que seja possível conseguir corretamente cada item com os métodos get...() do TypedArray.

Observação: uma matriz tipada é um recurso simples que é referenciado usando o valor fornecido no atributo name (não no nome do arquivo XML). Dessa forma, você pode combinar recursos de matriz tipada com outros recursos simples em um arquivo XML, em um elemento <resources>.

localização do arquivo:
res/values/filename.xml
O nome do arquivo é arbitrário. O name do elemento <array> será usado como o ID do recurso.
tipo de dados do recurso compilado:
Ponteiro do recurso para um TypedArray.
referência de recurso:
Em Java: R.array.array_name
Em XML: @[package:]array.array_name
sintaxe:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array
            name="integer_array_name">
            <item>resource</item>
        </array>
    </resources>
    
elementos:
<resources>
Obrigatório. Precisa ser o nó raiz.

Nenhum atributo.

<array>
Define uma matriz. Contém um ou mais elementos <item> filhos.

atributos:

android:name
String. Um nome para a matriz. Esse nome será usado como o ID do recurso para fazer referência à matriz.
<item>
Um recurso genérico. O valor pode ser uma referência a um recurso ou a um tipo de dados simples. Precisa ser um filho de um elemento <array>.

Nenhum atributo.

exemplo:
Arquivo XML salvo em res/values/arrays.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="icons">
            <item>@drawable/home</item>
            <item>@drawable/settings</item>
            <item>@drawable/logout</item>
        </array>
        <array name="colors">
            <item>#FFFF0000</item>
            <item>#FF00FF00</item>
            <item>#FF0000FF</item>
        </array>
    </resources>
    

Este código de aplicativo recupera cada matriz e recupera a primeira entrada em cada delas:

Kotlin

    val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
    val drawable: Drawable = icons.getDrawable(0)

    val colors: TypedArray = resources.obtainTypedArray(R.array.colors)
    val color: Int = colors.getColor(0,0)
    

Java

    Resources res = getResources();
    TypedArray icons = res.obtainTypedArray(R.array.icons);
    Drawable drawable = icons.getDrawable(0);

    TypedArray colors = res.obtainTypedArray(R.array.colors);
    int color = colors.getColor(0,0);