1page.title=Доступ к ресурсам 2parent.title=Ресурсы приложения 3parent.link=index.html 4@jd:body 5 6<div id="qv-wrapper"> 7<div id="qv"> 8 <h2>Краткое описание</h2> 9 <ul> 10 <li>В коде для создания ссылок на ресурсы можно использовать целочисленные переменные из {@code R.java}, такие как 11{@code R.drawable.myimage}</li> 12 <li>Для создания ссылок на ресурсы из самих ресурсов можно использовать особый синтаксис XML, например {@code 13@drawable/myimage}</li> 14 <li>Также для доступа к ресурсам приложения используются методы класса 15{@link android.content.res.Resources}</li> 16 </ul> 17 18 <h2>Ключевые классы</h2> 19 <ol> 20 <li>{@link android.content.res.Resources}</li> 21 </ol> 22 23 <h2>Содержание документа</h2> 24 <ol> 25 <li><a href="#ResourcesFromCode">Доступ к ресурсам из кода</a></li> 26 <li><a href="#ResourcesFromXml">Доступ к ресурсам из XML</a> 27 <ol> 28 <li><a href="#ReferencesToThemeAttributes">Ссылка на атрибуты стиля</a></li> 29 </ol> 30 </li> 31 <li><a href="#PlatformResources">Доступ к ресурсам платформы</a></li> 32 </ol> 33 34 <h2>См. также:</h2> 35 <ol> 36 <li><a href="providing-resources.html">Предоставление ресурсов</a></li> 37 <li><a href="available-resources.html">Типы ресурсов</a></li> 38 </ol> 39</div> 40</div> 41 42 43 44 45<p>После того, как вы предоставили ресурс в вашем приложении (см. раздел <a href="providing-resources.html">Предоставление ресурсов</a>), этот ресурс можно применить. Для этого необходимо создать 46ссылку на идентификатор ресурса. Для задания всех таких идентификаторов в вашем проекте используется класс {@code R}, который автоматически создается инструментом 47{@code aapt}.</p> 48 49<p>Во время компиляции приложения инструмент {@code aapt} создает класс {@code R}, в котором находятся 50идентификаторы для всех ресурсов в каталоге {@code 51res/}. Для каждого типа ресурсов предусмотрен подкласс {@code R} (например, 52класс {@code R.drawable} для элементов дизайна), а для каждого ресурса указанного типа существует статическая 53целочисленная переменная (например, {@code R.drawable.icon}). Эта переменная как раз и служит идентификатором ресурса, которую можно 54использовать для его получения.</p> 55 56<p>Несмотря на то, что в классе {@code R} находятся идентификаторы ресурсов, никогда не обращайтесь к нему 57для поиска идентификатора ресурса. Последний состоит из следующих компонентов:</p> 58<ul> 59 <li><em>Тип ресурса</em>: ресурсы объединены по типам, таким как {@code 60string}, {@code drawable} и {@code layout}. Дополнительные сведения о различных типах представлены в разделе <a href="available-resources.html">Типы ресурсов</a>. 61 </li> 62 <li><em>Имя ресурса</em>, в качестве которого выступает либо имя файла 63(без расширения), либо значение атрибута XML {@code android:name} (если 64ресурс представляет собой простое значение, например строку).</li> 65</ul> 66 67<p>Существует два способа доступа к ресурсу.</p> 68<ul> 69 <li><strong>Из кода:</strong> с помощью статической целочисленной переменной из подкласса вашего класса {@code R} 70, например: 71 <pre class="classic no-pretty-print">R.string.hello</pre> 72 <p>{@code string} — это тип ресурса, а {@code hello} — это его имя. Существует множество API-интерфейсов 73Android, которые могут получать доступ к ресурсам, идентификаторы которых указаны в этом формате. См. раздел 74<a href="#ResourcesFromCode">Доступ к ресурсам из кода</a>.</p> 75 </li> 76 <li><strong>Из XML:</strong> с помощью особого синтаксиса XML, который также соответствует 77идентификатору ресурса, заданному в классе {@code R}, например: 78 <pre class="classic no-pretty-print">@string/hello</pre> 79 <p>{@code string} — это тип ресурса, а {@code hello} — это его имя. Этот синтаксис можно 80использовать в любом фрагменте ресурса XML, где ожидается значение, указанное вами в ресурсе. См. раздел <a href="#ResourcesFromXml">Доступ к ресурсам из XML</a></p> 81 </li> 82</ul> 83 84 85 86<h2 id="ResourcesFromCode">Доступ к ресурсам из кода </h2> 87 88<p>Чтобы использовать ресурс в коде, можно передать идентификатор ресурса в виде параметра метода. Например, с 89помощью метода {@link android.widget.ImageView#setImageResource(int) setImageResource()} можно указать использование виджетом {@link android.widget.ImageView} ресурса {@code res/drawable/myimage.png}: 90</p> 91<pre> 92ImageView imageView = (ImageView) findViewById(R.id.myimageview); 93imageView.setImageResource(<strong>R.drawable.myimage</strong>); 94</pre> 95 96<p>Отдельные ресурсы также можно получать с помощью методов в классе {@link 97android.content.res.Resources}, экземпляр которого можно получить с помощью 98метода {@link android.content.Context#getResources()}.</p> 99 100<div class="sidebox-wrapper"> 101<div class="sidebox"> 102<h2>Доступ к исходным файлам</h2> 103 104<p>В редких случаях может потребоваться получить доступ к исходным файлам и каталогам. В этом случае просто сохранить 105файлы в каталоге {@code res/} будет недостаточно, поскольку обратиться к ресурсу из папки 106{@code res/} можно только по его идентификатору. Вместо этого ресурсы можно сохранить в каталоге 107{@code assets/}.</p> 108<p>Файлам, которые сохранены в каталоге {@code assets/}, <em>не</em> присваиваются идентификаторы 109ресурсов, поэтому вам не удастся сослаться на них с помощью класса {@code R} или из ресурсов XML. Вместо этого можно 110запросить файлы из каталога {@code assets/}, как в обычной файловой системе, и считать необработанные данные с помощью 111{@link android.content.res.AssetManager}.</p> 112<p>Однако, если вам требуется всего лишь возможность считать необработанные данные (например, видео- или аудиофайл), 113 сохраните требуемый файл в каталоге {@code res/raw/} и считайте поток байтов с помощью метода {@link 114android.content.res.Resources#openRawResource(int) openRawResource()}.</p> 115 116</div> 117</div> 118 119 120<h3>Синтаксис</h3> 121 122<p>Ниже представлен синтаксис ссылки на ресурс из кода.</p> 123 124<pre class="classic no-pretty-print"> 125[<em><package_name></em>.]R.<em><resource_type></em>.<em><resource_name></em> 126</pre> 127 128<ul> 129 <li><em>{@code <package_name>}</em> — это имя пакета, в котором находится ресурс (не 130требуется при создании ссылок на ресурсы из вашего собственного пакета).</li> 131 <li><em>{@code <resource_type>}</em> — это подкласс {@code R} для типа ресурса.</li> 132 <li><em>{@code <resource_name>}</em> — это либо имя файла 133ресурса (без расширения), либо значение атрибута {@code android:name} в элементе XML (для простых 134значений).</li> 135</ul> 136<p>Дополнительные сведения о каждом типе 137ресурсов и порядке создания ссылок на них см. в разделе <a href="available-resources.html">Типы ресурсов</a>.</p> 138 139 140<h3>Примеры использования</h3> 141 142<p>Существует множество методов, которые могут принимать идентификатор ресурса в виде параметра. Для получения ресурсов можно использовать методы, 143представленные в классе {@link android.content.res.Resources}. Можно получить экземпляр {@link 144android.content.res.Resources} с помощью {@link android.content.Context#getResources 145Context.getResources()}.</p> 146 147 148<p>Вот некоторые примеры доступа к ресурсам из кода:</p> 149 150<pre> 151// Load a background for the current screen from a drawable resource 152{@link android.app.Activity#getWindow()}.{@link 153android.view.Window#setBackgroundDrawableResource(int) 154setBackgroundDrawableResource}(<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) 159setTitle}(getResources().{@link android.content.res.Resources#getText(int) 160getText}(<strong>R.string.main_title</strong>)); 161 162// Load a custom layout for the current screen 163{@link android.app.Activity#setContentView(int) 164setContentView}(<strong>R.layout.main_screen</strong>); 165 166// Set a slide in animation by getting an Animation from the Resources object 167mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation) 168setInAnimation}(AnimationUtils.loadAnimation(this, 169 <strong>R.anim.hyperspace_in</strong>)); 170 171// Set the text on a TextView object using a resource ID 172TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>); 173msgTextView.{@link android.widget.TextView#setText(int) 174setText}(<strong>R.string.hello_message</strong>); 175</pre> 176 177 178<p class="caution"><strong>Внимание!</strong> Никогда не изменяйте файл {@code 179R.java} вручную — этот файл создается инструментом {@code aapt} во время компиляции вашего 180проекта. Любые внесенные в него изменения перезаписываются после следующей компиляции.</p> 181 182 183 184<h2 id="ResourcesFromXml">Доступ к ресурсам из XML</h2> 185 186<p>Для задания значений для некоторых атрибутов и элементов XML можно использовать 187ссылку на существующий ресурс. Это зачастую требуется при создании файлов макета при 188указании строк и изображений для виджетов.</p> 189 190<p>Например, при добавлении в макет элемента {@link android.widget.Button} необходимо использовать 191<a href="string-resource.html">строковый ресурс</a> для надписи на кнопке:</p> 192 193<pre> 194<Button 195 android:layout_width="fill_parent" 196 android:layout_height="wrap_content" 197 android:text="<strong>@string/submit</strong>" /> 198</pre> 199 200 201<h3>Синтаксис</h3> 202 203<p>Ниже представлен синтаксис ссылки на ресурс из ресурса XML.</p> 204 205<pre class="classic no-pretty-print"> 206@[<em><package_name></em>:]<em><resource_type></em>/<em><resource_name></em> 207</pre> 208 209<ul> 210 <li>{@code <package_name>} — это имя пакета, в котором находится ресурс (не 211требуется при создании ссылок на ресурсы из одного и того же пакета).</li> 212 <li>{@code <resource_type>} — это подкласс 213{@code R} для типа ресурса.</li> 214 <li>{@code <resource_name>} — это либо имя файла 215ресурса (без расширения), либо значение атрибута {@code android:name} в элементе XML (для простых 216значений).</li> 217</ul> 218 219<p>Дополнительные сведения о каждом типе 220ресурсов и порядке создания ссылок на них см. в разделе <a href="available-resources.html">Типы ресурсов</a>.</p> 221 222 223<h3>Примеры использования</h3> 224 225<p>В некоторых случаях ресурс необходимо использовать в качестве значения в элементе XML (например, чтобы применить графическое изображение к 226виджету), однако вы также можете использовать ресурс в любом фрагменте XML, где ожидается простое значение. Например, 227если имеется следующий файл ресурса, включающий <a href="more-resources.html#Color">цветовой ресурс</a> и <a href="string-resource.html">строковый ресурс</a>:</p> 228 229<pre> 230<?xml version="1.0" encoding="utf-8"?> 231<resources> 232 <color name="opaque_red">#f00</color> 233 <string name="hello">Hello!</string> 234</resources> 235</pre> 236 237<p>Эти ресурсы можно использовать в следующем файле макета для задания цвета текста и 238надписи:</p> 239 240<pre> 241<?xml version="1.0" encoding="utf-8"?> 242<EditText xmlns:android="http://schemas.android.com/apk/res/android" 243 android:layout_width="fill_parent" 244 android:layout_height="fill_parent" 245 android:textColor="<strong>@color/opaque_red</strong>" 246 android:text="<strong>@string/hello</strong>" /> 247</pre> 248 249<p>В этом случае в ссылке на ресурс не нужно указывать имя пакета, поскольку 250ресурсы находятся в вашем собственном пакете. Однако для создания 251ссылки на системный ресурс вам потребуется указать имя пакета. Например:</p> 252 253<pre> 254<?xml version="1.0" encoding="utf-8"?> 255<EditText xmlns:android="http://schemas.android.com/apk/res/android" 256 android:layout_width="fill_parent" 257 android:layout_height="fill_parent" 258 android:textColor="<strong>@android:color/secondary_text_dark</strong>" 259 android:text="@string/hello" /> 260</pre> 261 262<p class="note"><strong>Примечание.</strong> Всегда используйте строковые ресурсы, 263поскольку ваше приложение может потребоваться перевести на другие языки. 264Сведения о создании альтернативных 265ресурсов (например, локализованных строк) представлены в разделе <a href="providing-resources.html#AlternativeResources">Предоставление альтернативных 266ресурсов</a>. В разделе <a href="localization.html">Локализация</a> приведено полное руководство по локализации 267приложения.</p> 268 269<p>Вы даже можете использовать ресурсы в XML для создания псевдонимов. Например, можно создать 270элемент дизайна, который будет служить псевдонимом для другого элемента дизайна:</p> 271 272<pre> 273<?xml version="1.0" encoding="utf-8"?> 274<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 275 android:src="@drawable/other_drawable" /> 276</pre> 277 278<p>Это может показаться излишним, однако такой подход очень полезен при использовании альтернативных ресурсов. Узнайте подробнее о 279<a href="providing-resources.html#AliasResources">создании псевдонимов ресурсов</a>.</p> 280 281 282 283<h3 id="ReferencesToThemeAttributes">Ссылка на атрибуты стиля</h3> 284 285<p>С помощью ресурса атрибута стиля можно создать ссылку на значение 286атрибута в текущей примененной теме. Таким образом можно 287настраивать внешний вид элементов пользовательского интерфейса, подстраивая их под стандартные варианты элементов оформления 288текущей темы, вместо указания жестко заданных значений. Создание ссылки на атрибут стиля 289представляет собой своеобразную инструкцию «использовать стиль, заданный этим атрибутом в текущей теме».</p> 290 291<p>Синтаксис для создания ссылки на атрибут стиля практически идентичен обычному формату 292ресурса, только в этом случае вместо символа{@code @} необходимо указать вопросительный знак ({@code ?}), а тип ресурса 293вообще необязательно указывать. Например:</p> 294 295<pre class="classic"> 296?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em> 297</pre> 298 299<p>Ниже представлен пример создания ссылки на атрибут для задания цвета текста в соответствии с 300«основным» цветом текста системной темы оформления:</p> 301 302<pre> 303<EditText id="text" 304 android:layout_width="fill_parent" 305 android:layout_height="wrap_content" 306 android:textColor="<strong>?android:textColorSecondary</strong>" 307 android:text="@string/hello_world" /> 308</pre> 309 310<p>Здесь атрибут {@code android:textColor} служит для задания имени атрибута стиля 311в текущей теме. Теперь в Android используется значение, примененное к атрибуту стиля{@code android:textColorSecondary} 312в качестве значения для {@code android:textColor} в этом виджете. Поскольку инструменту для работы с системными 313ресурсами известно, что в этом контексте ожидается ресурс атрибута, 314вам не нужно явно указывать его тип (который должен быть 315<code>?android:attr/textColorSecondary</code>) — тип {@code attr} можно исключить.</p> 316 317 318 319 320<h2 id="PlatformResources">Доступ к ресурсам платформы</h2> 321 322<p>В Android предусмотрен ряд стандартных ресурсов, например, стилей, тем и макетов. Для 323доступа к этим ресурсам укажите в ссылке на ресурс имя пакета 324<code>android</code>. Например, в Android имеется ресурс макета, который можно использовать для 325элементов списка в виджете {@link android.widget.ListAdapter}:</p> 326 327<pre> 328{@link android.app.ListActivity#setListAdapter(ListAdapter) 329setListAdapter}(new {@link 330android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray)); 331</pre> 332 333<p>В этом примере {@link android.R.layout#simple_list_item_1} представляет собой ресурс макета, определенный 334платформой для элементов в виджете {@link android.widget.ListView}. Вы можете использовать его вместо создания 335собственных макетов для элементов списка. Дополнительные сведения представлены в руководстве для разработчиков, посвященном 336<a href="{@docRoot}guide/topics/ui/layout/listview.html">представлению в виде списка</a>.</p> 337 338