Home | History | Annotate | Download | only in resources
      1 page.title=Acesso aos recursos
      2 parent.title=Recursos de aplicativos
      3 parent.link=index.html
      4 @jd:body
      5 
      6 <div id="qv-wrapper">
      7 <div id="qv">
      8   <h2>Visualizao rpida</h2>
      9   <ul>
     10     <li>Recursos podem ser referenciados a partir do cdigo usando nmeros inteiros de {@code R.java}, como
     11 {@code R.drawable.myimage}</li>
     12     <li>Recursos podem ser referenciados de recursos usando uma sintaxe XML especial, como {@code
     13 &#64;drawable/myimage}</li>
     14     <li>Tambm  possvel acessar os recursos do aplicativo com mtodos em 
     15 {@link android.content.res.Resources}</li>
     16   </ul>
     17 
     18   <h2>Classes principais</h2>
     19   <ol>
     20     <li>{@link android.content.res.Resources}</li>
     21   </ol>
     22 
     23   <h2>Neste documento</h2>
     24   <ol>
     25     <li><a href="#ResourcesFromCode">Acesso aos recursos do cdigo</a></li>
     26     <li><a href="#ResourcesFromXml">Acesso aos recursos do XML</a>
     27       <ol>
     28         <li><a href="#ReferencesToThemeAttributes">Referncia a atributos de estilo</a></li>
     29       </ol>
     30     </li>
     31     <li><a href="#PlatformResources">Acesso aos recursos da plataforma</a></li>
     32   </ol>
     33 
     34   <h2>Veja tambm</h2>
     35   <ol>
     36     <li><a href="providing-resources.html">Fornecimento de recursos</a></li>
     37     <li><a href="available-resources.html">Tipos de recursos</a></li>
     38   </ol>
     39 </div>
     40 </div>
     41 
     42 
     43 
     44 
     45 <p>Depois de fornecer um recurso no aplicativo (discutido em <a href="providing-resources.html">Fornecimento de recursos</a>),  possvel aplic-lo
     46 referenciando seu ID de recurso. Todos os IDs de recursos so definidos na classe {@code R} do projeto, que 
     47 a ferramenta {@code aapt} gera automaticamente.</p>
     48 
     49 <p>Quando o aplicativo  compilado, {@code aapt} gera a classe {@code R}, que contm 
     50 IDs de recursos para todos os recursos no diretrio {@code
     51 res/}. Para cada tipo de recurso, h uma subclasse {@code R} (por exemplo,
     52 {@code R.drawable} para todos os recursos desenhveis) e, para cada recurso daquele tipo, h um nmero inteiro
     53 esttico (por exemplo, {@code R.drawable.icon}). Esse nmero inteiro  o ID do recurso que pode ser usado para
     54 recuper-lo.</p>
     55 
     56 <p>Apesar de a classe {@code R} ser o local onde os IDs de recursos so especificados, no deve nunca ser necessrio
     57 verific-la para descobrir um ID de recurso. Ele  sempre composto de:</p>
     58 <ul>
     59   <li>O <em>tipo de recurso</em>: cada recurso  agrupado em um "tipo", como {@code
     60 string}, {@code drawable} e {@code layout}. Para saber mais sobre os diferentes tipos, consulte <a href="available-resources.html">Tipos de recursos</a>.
     61   </li>
     62   <li>O <em>nome do recurso</em>, que : o nome do arquivo,
     63 excluindo a extenso; ou o valor no atributo {@code android:name} do XML, se o 
     64 recurso for um valor simples (como uma string).</li>
     65 </ul>
     66 
     67 <p>H duas formas de acessar um recurso:</p>
     68 <ul>
     69   <li><strong>No cdigo:</strong> Usando um nmero inteiro esttico de uma subclasse de sua classe {@code R},
     70 como:
     71     <pre class="classic no-pretty-print">R.string.hello</pre>
     72     <p>{@code string}  o tipo de recurso e {@code hello}  o nome do recurso. H muitas
     73 APIs do Android que podem acessar os seus recursos quando voc fornece um ID de recurso nesse formato. Consulte
     74 <a href="#ResourcesFromCode">Acesso aos recursos no cdigo</a>.</p>
     75   </li>
     76   <li><strong>No XML:</strong> usando uma sintaxe XML especial que tambm corresponde ao
     77 ID de recurso definido em sua classe {@code R}, como:
     78     <pre class="classic no-pretty-print">&#64;string/hello</pre>
     79     <p>{@code string}  o tipo de recurso e {@code hello}  o nome do recurso. Voc pode usar essa
     80 sintaxe em um recurso XML em qualquer lugar em que um valor  esperado e que seja fornecido em um recurso. Consulte <a href="#ResourcesFromXml">Acesso aos recursos do XML</a>.</p>
     81   </li>
     82 </ul>
     83 
     84 
     85 
     86 <h2 id="ResourcesFromCode">Acesso aos recursos no cdigo </h2>
     87 
     88 <p>Voc pode usar um recurso no cdigo passando o ID do recurso como um parmetro do mtodo. Por
     89 exemplo,  possvel definir uma {@link android.widget.ImageView} para usar o recurso {@code res/drawable/myimage.png}
     90 usando {@link android.widget.ImageView#setImageResource(int) setImageResource()}:</p>
     91 <pre>
     92 ImageView imageView = (ImageView) findViewById(R.id.myimageview);
     93 imageView.setImageResource(<strong>R.drawable.myimage</strong>);
     94 </pre>
     95 
     96 <p>Tambm  possvel recuperar recursos individuais usando mtodos em {@link
     97 android.content.res.Resources}, dos quais  possvel obter uma instncia
     98 com {@link android.content.Context#getResources()}.</p>
     99 
    100 <div class="sidebox-wrapper">
    101 <div class="sidebox">
    102 <h2>Acesso aos arquivos originais</h2>
    103 
    104 <p>Apesar de ser incomum, pode ser necessrio acessar os arquivos e os diretrios originais. Nesse caso, 
    105 salvar os arquivos em {@code res/} no funcionar, pois a nica forma de ler um recurso de
    106 {@code res/}  com o ID do recurso. Em vez disso,  possvel salvar os recursos no
    107 diretrio {@code assets/}.</p>
    108 <p>Arquivos salvos no diretrio {@code assets/} <em>no</em> recebem um ID de recurso,
    109 portanto, no  possvel referenci-los com a classe {@code R} nem de recursos XML. Em vez disso,  possvel
    110 consultar arquivos no diretrio {@code assets/} como um sistema de arquivos normal e ler dados brutos usando o
    111 {@link android.content.res.AssetManager}.</p>
    112 <p>No entanto, se voc s precisa da capacidade de ler dados brutos (como um arquivo de vdeo ou udio),
    113 salve o arquivo no diretrio {@code res/raw/} e leia um fluxo de bytes usando {@link
    114 android.content.res.Resources#openRawResource(int) openRawResource()}.</p>
    115 
    116 </div>
    117 </div>
    118 
    119 
    120 <h3>Sintaxe</h3>
    121 
    122 <p>Esta  a sintaxe para referenciar um recurso no cdigo:</p>
    123 
    124 <pre class="classic no-pretty-print">
    125 [<em>&lt;package_name&gt;</em>.]R.<em>&lt;resource_type&gt;</em>.<em>&lt;resource_name&gt;</em>
    126 </pre>
    127 
    128 <ul>
    129   <li><em>{@code &lt;package_name&gt;}</em>  o nome do pacote no qual o recurso est localizado (no
    130  obrigatrio ao referenciar recursos de seu prprio pacote).</li>
    131   <li><em>{@code &lt;resource_type&gt;}</em>  a subclasse {@code R} do tipo de recurso.</li>
    132   <li><em>{@code &lt;resource_name&gt;}</em>  o nome do arquivo do recurso
    133 sem a extenso ou o valor do atributo {@code android:name} no elemento XML (para valores
    134 simples).</li>
    135 </ul>
    136 <p>Consulte <a href="available-resources.html">Tipos de recursos</a> para
    137 obter mais informaes sobre cada tipo de recurso e como referenci-los.</p>
    138 
    139 
    140 <h3>Casos de uso</h3>
    141 
    142 <p>H muitos mtodos que aceitam um parmetro de ID de recurso e voc pode recuperar recursos usando 
    143 mtodos em {@link android.content.res.Resources}.  possvel obter uma instncia de {@link
    144 android.content.res.Resources} com {@link android.content.Context#getResources
    145 Context.getResources()}.</p>
    146 
    147 
    148 <p>Abaixo h alguns exemplos do acesso aos recursos no cdigo:</p>
    149 
    150 <pre>
    151 // Load a background for the current screen from a drawable resource
    152 {@link android.app.Activity#getWindow()}.{@link
    153 android.view.Window#setBackgroundDrawableResource(int)
    154 setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ;
    155 
    156 // Set the Activity title by getting a string from the Resources object, because
    157 //  this method requires a CharSequence rather than a resource ID
    158 {@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence)
    159 setTitle}(getResources().{@link android.content.res.Resources#getText(int)
    160 getText}(<strong>R.string.main_title</strong>));
    161 
    162 // Load a custom layout for the current screen
    163 {@link android.app.Activity#setContentView(int)
    164 setContentView}(<strong>R.layout.main_screen</strong>);
    165 
    166 // Set a slide in animation by getting an Animation from the Resources object
    167 mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation)
    168 setInAnimation}(AnimationUtils.loadAnimation(this,
    169         <strong>R.anim.hyperspace_in</strong>));
    170 
    171 // Set the text on a TextView object using a resource ID
    172 TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>);
    173 msgTextView.{@link android.widget.TextView#setText(int)
    174 setText}(<strong>R.string.hello_message</strong>);
    175 </pre>
    176 
    177 
    178 <p class="caution"><strong>Ateno:</strong> nunca modifique o arquivo {@code
    179 R.java} manualmente &mdash; ele  gerado pela ferramenta {@code aapt} quando o projeto  
    180 compilado. As alteraes sero sobrepostas na prxima compilao.</p>
    181 
    182 
    183 
    184 <h2 id="ResourcesFromXml">Acesso aos recursos do XML</h2>
    185 
    186 <p>Voc pode definir valores para alguns atributos e elementos XML usando uma
    187 referncia a um recurso existente. Isso ser feito com frequncia ao criar arquivos de layout
    188 para fornecer strings e imagens para os widgets.</p>
    189 
    190 <p>Por enviar mensagem de texto, se voc adicionar um {@link android.widget.Button} ao layout, dever usar
    191 um <a href="string-resource.html">recurso de string</a> para o texto do boto:</p>
    192 
    193 <pre>
    194 &lt;Button
    195     android:layout_width="fill_parent"
    196     android:layout_height="wrap_content"
    197     android:text="<strong>@string/submit</strong>" /&gt;
    198 </pre>
    199 
    200 
    201 <h3>Sintaxe</h3>
    202 
    203 <p>Esta  a sintaxe para referenciar um recurso em um recurso XML:</p>
    204 
    205 <pre class="classic no-pretty-print">
    206 &#64;[<em>&lt;package_name&gt;</em>:]<em>&lt;resource_type&gt;</em>/<em>&lt;resource_name&gt;</em>
    207 </pre>
    208 
    209 <ul>
    210   <li>{@code &lt;package_name&gt;}  o nome do pacote no qual o recurso est localizado (no
    211  obrigatrio ao referenciar recursos do mesmo pacote).</li>
    212   <li>{@code &lt;resource_type&gt;}  a subclasse 
    213 {@code R} do tipo de recurso.</li>
    214   <li>{@code &lt;resource_name&gt;}  o nome do arquivo do recurso
    215 sem a extenso ou o valor do atributo {@code android:name} no elemento XML (para valores
    216 simples).</li>
    217 </ul>
    218 
    219 <p>Consulte <a href="available-resources.html">Tipos de recursos</a> para
    220 obter mais informaes sobre cada tipo de recurso e como referenci-los.</p>
    221 
    222 
    223 <h3>Casos de uso</h3>
    224 
    225 <p>Em alguns casos,  preciso usar um recurso para um valor em XML (por exemplo, para aplicar uma imagem desenhvel
    226 a um widget), mas voc tambm pode usar um recurso em XML em qualquer lugar que aceite um valor simples. Por
    227 exemplo, se voc tiver o seguinte arquivo de recursos que inclui um <a href="more-resources.html#Color">recurso de cor</a> e um <a href="string-resource.html">recurso de string</a>:</p>
    228 
    229 <pre>
    230 &lt;?xml version="1.0" encoding="utf-8"?>
    231 &lt;resources>
    232    &lt;color name="opaque_red">#f00&lt;/color>
    233    &lt;string name="hello">Hello!&lt;/string>
    234 &lt;/resources>
    235 </pre>
    236 
    237 <p> possvel usar esses recursos no arquivo de layout a seguir para definir a cor to texto e a
    238 string do texto:</p>
    239 
    240 <pre>
    241 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
    242 &lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android";
    243     android:layout_width=&quot;fill_parent&quot;
    244     android:layout_height=&quot;fill_parent&quot;
    245     android:textColor=&quot;<strong>&#64;color/opaque_red</strong>&quot;
    246     android:text=&quot;<strong>&#64;string/hello</strong>&quot; /&gt;
    247 </pre>
    248 
    249 <p>Nesse caso, no  preciso especificar o nome do pacote na referncia do recurso porque os
    250 recursos so de seu prprio pacote. Para
    251 referenciar um recurso do sistema,  preciso incluir o nome do pacote. Por exemplo:</p>
    252 
    253 <pre>
    254 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
    255 &lt;EditText xmlns:android=&quot;http://schemas.android.com/apk/res/android";
    256     android:layout_width=&quot;fill_parent&quot;
    257     android:layout_height=&quot;fill_parent&quot;
    258     android:textColor=&quot;<strong>&#64;android:color/secondary_text_dark</strong>&quot;
    259     android:text=&quot;&#64;string/hello&quot; /&gt;
    260 </pre>
    261 
    262 <p class="note"><strong>Observao:</strong> voc deve usar recursos de string
    263 o tempo inteiro para que o seu aplicativo possa ser localizado para outros idiomas. 
    264 Para obter informaes sobre a criao de recursos
    265 alternativos (como strings localizadas), consulte <a href="providing-resources.html#AlternativeResources">Fornecimento de recursos 
    266 alternativos</a>. Para obter um guia completo para localizar o aplicativo para outros idiomas, 
    267 consulte <a href="localization.html">Localizao</a>.</p>
    268 
    269 <p>Voc pode at mesmo usar recursos em XML para criar alias. Por exemplo,  possvel criar um recurso
    270 desenhvel que seja um alias para outro recurso desenhvel:</p>
    271 
    272 <pre>
    273 &lt;?xml version="1.0" encoding="utf-8"?>
    274 &lt;bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    275     android:src="@drawable/other_drawable" />
    276 </pre>
    277 
    278 <p>Isso parece redundante, mas pode ser muito til ao usar um recurso alternativo. Leia mais sobre
    279 <a href="providing-resources.html#AliasResources">Criao de recursos de alias</a>.</p>
    280 
    281 
    282 
    283 <h3 id="ReferencesToThemeAttributes">Referncia a atributos de estilo</h3>
    284 
    285 <p>Um recurso de atributo de estilo permite referenciar o valor
    286 de um atributo no tema atualmente aplicado. Referenciar um atributo de estilo permite
    287 personalizar a aparncia de elementos da IU deixando-os com estilo que corresponda a variaes padro fornecidas pelo
    288 tema atual, em vez de fornecer um valor codificado. Referenciar um atributo de estilo
    289 essencialmente significa "usar o estilo que  definido por esse atributo no tema atual".</p>
    290 
    291 <p>Para referenciar um atributo de estilo, a sintaxe do nome  quase idntica ao formato normal de recurso,
    292 mas, em vez de o smbolo arroba ({@code @}), use um ponto de interrogao ({@code ?}). Alm disso, 
    293 a parte do tipo de recurso  opcional. Por exemplo:</p>
    294 
    295 <pre class="classic">
    296 ?[<em>&lt;package_name&gt;</em>:][<em>&lt;resource_type&gt;</em>/]<em>&lt;resource_name&gt;</em>
    297 </pre>
    298 
    299 <p>Por exemplo, abaixo apresenta-se como voc pode referenciar um atributo para definir a cor do texto para que corresponda  
    300 cor "principal" do texto do tema do sistema:</p>
    301 
    302 <pre>
    303 &lt;EditText id=&quot;text&quot;
    304     android:layout_width=&quot;fill_parent&quot;
    305     android:layout_height=&quot;wrap_content&quot;
    306     android:textColor=&quot;<strong>?android:textColorSecondary</strong>&quot;
    307     android:text=&quot;&#64;string/hello_world&quot; /&gt;
    308 </pre>
    309 
    310 <p>Aqui, o atributo {@code android:textColor} especifica o nome de um atributo de estilo
    311 no tema atual. O Android agora usa o valor aplicado ao atributo de estilo {@code android:textColorSecondary}
    312 como o valor para {@code android:textColor} nesse widget. Como a ferramenta de recursos
    313 do sistema sabe que um recurso de atributo  esperado nesse contexto,
    314 no  preciso declarar explicitamente o tipo (que seria
    315 <code>?android:attr/textColorSecondary</code>) &mdash; voc pode excluir o tipo de {@code attr}.</p>
    316 
    317 
    318 
    319 
    320 <h2 id="PlatformResources">Acesso aos recursos da plataforma</h2>
    321 
    322 <p>O Android contm uma srie de recursos padro, como estilos, temas e layouts. Para
    323 acess-los, qualifique a referncia de recurso com o 
    324 nome do pacote <code>android</code>. Por exemplo, o Android fornece um recurso de layout que pode ser usado para
    325 listar itens em um {@link android.widget.ListAdapter}:</p>
    326 
    327 <pre>
    328 {@link android.app.ListActivity#setListAdapter(ListAdapter)
    329 setListAdapter}(new {@link
    330 android.widget.ArrayAdapter}&lt;String&gt;(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray));
    331 </pre>
    332 
    333 <p>Nesse exemplo, {@link android.R.layout#simple_list_item_1}  um recurso de layout definido pela
    334 plataforma para itens em uma {@link android.widget.ListView}. Voc pode us-lo em vez de criar o
    335 prprio layout para itens de lista. Para obter mais informaes, consulte o
    336 guia do desenvolvedor de <a href="{@docRoot}guide/topics/ui/layout/listview.html">Vista de lista</a>.</p>
    337 
    338