| page.title=Доступ к ресурсам |
| parent.title=Ресурсы приложения |
| parent.link=index.html |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>Краткое описание</h2> |
| <ul> |
| <li>В коде для создания ссылок на ресурсы можно использовать целочисленные переменные из {@code R.java}, такие как |
| {@code R.drawable.myimage}</li> |
| <li>Для создания ссылок на ресурсы из самих ресурсов можно использовать особый синтаксис XML, например {@code |
| @drawable/myimage}</li> |
| <li>Также для доступа к ресурсам приложения используются методы класса |
| {@link android.content.res.Resources}</li> |
| </ul> |
| |
| <h2>Ключевые классы</h2> |
| <ol> |
| <li>{@link android.content.res.Resources}</li> |
| </ol> |
| |
| <h2>Содержание документа</h2> |
| <ol> |
| <li><a href="#ResourcesFromCode">Доступ к ресурсам из кода</a></li> |
| <li><a href="#ResourcesFromXml">Доступ к ресурсам из XML</a> |
| <ol> |
| <li><a href="#ReferencesToThemeAttributes">Ссылка на атрибуты стиля</a></li> |
| </ol> |
| </li> |
| <li><a href="#PlatformResources">Доступ к ресурсам платформы</a></li> |
| </ol> |
| |
| <h2>См. также:</h2> |
| <ol> |
| <li><a href="providing-resources.html">Предоставление ресурсов</a></li> |
| <li><a href="available-resources.html">Типы ресурсов</a></li> |
| </ol> |
| </div> |
| </div> |
| |
| |
| |
| |
| <p>После того, как вы предоставили ресурс в вашем приложении (см. раздел <a href="providing-resources.html">Предоставление ресурсов</a>), этот ресурс можно применить. Для этого необходимо создать |
| ссылку на идентификатор ресурса. Для задания всех таких идентификаторов в вашем проекте используется класс {@code R}, который автоматически создается инструментом |
| {@code aapt}.</p> |
| |
| <p>Во время компиляции приложения инструмент {@code aapt} создает класс {@code R}, в котором находятся |
| идентификаторы для всех ресурсов в каталоге {@code |
| res/}. Для каждого типа ресурсов предусмотрен подкласс {@code R} (например, |
| класс {@code R.drawable} для элементов дизайна), а для каждого ресурса указанного типа существует статическая |
| целочисленная переменная (например, {@code R.drawable.icon}). Эта переменная как раз и служит идентификатором ресурса, которую можно |
| использовать для его получения.</p> |
| |
| <p>Несмотря на то, что в классе {@code R} находятся идентификаторы ресурсов, никогда не обращайтесь к нему |
| для поиска идентификатора ресурса. Последний состоит из следующих компонентов:</p> |
| <ul> |
| <li><em>Тип ресурса</em>: ресурсы объединены по типам, таким как {@code |
| string}, {@code drawable} и {@code layout}. Дополнительные сведения о различных типах представлены в разделе <a href="available-resources.html">Типы ресурсов</a>. |
| </li> |
| <li><em>Имя ресурса</em>, в качестве которого выступает либо имя файла |
| (без расширения), либо значение атрибута XML {@code android:name} (если |
| ресурс представляет собой простое значение, например строку).</li> |
| </ul> |
| |
| <p>Существует два способа доступа к ресурсу.</p> |
| <ul> |
| <li><strong>Из кода:</strong> с помощью статической целочисленной переменной из подкласса вашего класса {@code R} |
| , например: |
| <pre class="classic no-pretty-print">R.string.hello</pre> |
| <p>{@code string} — это тип ресурса, а {@code hello} — это его имя. Существует множество API-интерфейсов |
| Android, которые могут получать доступ к ресурсам, идентификаторы которых указаны в этом формате. См. раздел |
| <a href="#ResourcesFromCode">Доступ к ресурсам из кода</a>.</p> |
| </li> |
| <li><strong>Из XML:</strong> с помощью особого синтаксиса XML, который также соответствует |
| идентификатору ресурса, заданному в классе {@code R}, например: |
| <pre class="classic no-pretty-print">@string/hello</pre> |
| <p>{@code string} — это тип ресурса, а {@code hello} — это его имя. Этот синтаксис можно |
| использовать в любом фрагменте ресурса XML, где ожидается значение, указанное вами в ресурсе. См. раздел <a href="#ResourcesFromXml">Доступ к ресурсам из XML</a></p> |
| </li> |
| </ul> |
| |
| |
| |
| <h2 id="ResourcesFromCode">Доступ к ресурсам из кода </h2> |
| |
| <p>Чтобы использовать ресурс в коде, можно передать идентификатор ресурса в виде параметра метода. Например, с |
| помощью метода {@link android.widget.ImageView#setImageResource(int) setImageResource()} можно указать использование виджетом {@link android.widget.ImageView} ресурса {@code res/drawable/myimage.png}: |
| </p> |
| <pre> |
| ImageView imageView = (ImageView) findViewById(R.id.myimageview); |
| imageView.setImageResource(<strong>R.drawable.myimage</strong>); |
| </pre> |
| |
| <p>Отдельные ресурсы также можно получать с помощью методов в классе {@link |
| android.content.res.Resources}, экземпляр которого можно получить с помощью |
| метода {@link android.content.Context#getResources()}.</p> |
| |
| <div class="sidebox-wrapper"> |
| <div class="sidebox"> |
| <h2>Доступ к исходным файлам</h2> |
| |
| <p>В редких случаях может потребоваться получить доступ к исходным файлам и каталогам. В этом случае просто сохранить |
| файлы в каталоге {@code res/} будет недостаточно, поскольку обратиться к ресурсу из папки |
| {@code res/} можно только по его идентификатору. Вместо этого ресурсы можно сохранить в каталоге |
| {@code assets/}.</p> |
| <p>Файлам, которые сохранены в каталоге {@code assets/}, <em>не</em> присваиваются идентификаторы |
| ресурсов, поэтому вам не удастся сослаться на них с помощью класса {@code R} или из ресурсов XML. Вместо этого можно |
| запросить файлы из каталога {@code assets/}, как в обычной файловой системе, и считать необработанные данные с помощью |
| {@link android.content.res.AssetManager}.</p> |
| <p>Однако, если вам требуется всего лишь возможность считать необработанные данные (например, видео- или аудиофайл), |
| сохраните требуемый файл в каталоге {@code res/raw/} и считайте поток байтов с помощью метода {@link |
| android.content.res.Resources#openRawResource(int) openRawResource()}.</p> |
| |
| </div> |
| </div> |
| |
| |
| <h3>Синтаксис</h3> |
| |
| <p>Ниже представлен синтаксис ссылки на ресурс из кода.</p> |
| |
| <pre class="classic no-pretty-print"> |
| [<em><package_name></em>.]R.<em><resource_type></em>.<em><resource_name></em> |
| </pre> |
| |
| <ul> |
| <li><em>{@code <package_name>}</em> — это имя пакета, в котором находится ресурс (не |
| требуется при создании ссылок на ресурсы из вашего собственного пакета).</li> |
| <li><em>{@code <resource_type>}</em> — это подкласс {@code R} для типа ресурса.</li> |
| <li><em>{@code <resource_name>}</em> — это либо имя файла |
| ресурса (без расширения), либо значение атрибута {@code android:name} в элементе XML (для простых |
| значений).</li> |
| </ul> |
| <p>Дополнительные сведения о каждом типе |
| ресурсов и порядке создания ссылок на них см. в разделе <a href="available-resources.html">Типы ресурсов</a>.</p> |
| |
| |
| <h3>Примеры использования</h3> |
| |
| <p>Существует множество методов, которые могут принимать идентификатор ресурса в виде параметра. Для получения ресурсов можно использовать методы, |
| представленные в классе {@link android.content.res.Resources}. Можно получить экземпляр {@link |
| android.content.res.Resources} с помощью {@link android.content.Context#getResources |
| Context.getResources()}.</p> |
| |
| |
| <p>Вот некоторые примеры доступа к ресурсам из кода:</p> |
| |
| <pre> |
| // Load a background for the current screen from a drawable resource |
| {@link android.app.Activity#getWindow()}.{@link |
| android.view.Window#setBackgroundDrawableResource(int) |
| setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ; |
| |
| // Set the Activity title by getting a string from the Resources object, because |
| // this method requires a CharSequence rather than a resource ID |
| {@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence) |
| setTitle}(getResources().{@link android.content.res.Resources#getText(int) |
| getText}(<strong>R.string.main_title</strong>)); |
| |
| // Load a custom layout for the current screen |
| {@link android.app.Activity#setContentView(int) |
| setContentView}(<strong>R.layout.main_screen</strong>); |
| |
| // Set a slide in animation by getting an Animation from the Resources object |
| mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation) |
| setInAnimation}(AnimationUtils.loadAnimation(this, |
| <strong>R.anim.hyperspace_in</strong>)); |
| |
| // Set the text on a TextView object using a resource ID |
| TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>); |
| msgTextView.{@link android.widget.TextView#setText(int) |
| setText}(<strong>R.string.hello_message</strong>); |
| </pre> |
| |
| |
| <p class="caution"><strong>Внимание!</strong> Никогда не изменяйте файл {@code |
| R.java} вручную — этот файл создается инструментом {@code aapt} во время компиляции вашего |
| проекта. Любые внесенные в него изменения перезаписываются после следующей компиляции.</p> |
| |
| |
| |
| <h2 id="ResourcesFromXml">Доступ к ресурсам из XML</h2> |
| |
| <p>Для задания значений для некоторых атрибутов и элементов XML можно использовать |
| ссылку на существующий ресурс. Это зачастую требуется при создании файлов макета при |
| указании строк и изображений для виджетов.</p> |
| |
| <p>Например, при добавлении в макет элемента {@link android.widget.Button} необходимо использовать |
| <a href="string-resource.html">строковый ресурс</a> для надписи на кнопке:</p> |
| |
| <pre> |
| <Button |
| android:layout_width="fill_parent" |
| android:layout_height="wrap_content" |
| android:text="<strong>@string/submit</strong>" /> |
| </pre> |
| |
| |
| <h3>Синтаксис</h3> |
| |
| <p>Ниже представлен синтаксис ссылки на ресурс из ресурса XML.</p> |
| |
| <pre class="classic no-pretty-print"> |
| @[<em><package_name></em>:]<em><resource_type></em>/<em><resource_name></em> |
| </pre> |
| |
| <ul> |
| <li>{@code <package_name>} — это имя пакета, в котором находится ресурс (не |
| требуется при создании ссылок на ресурсы из одного и того же пакета).</li> |
| <li>{@code <resource_type>} — это подкласс |
| {@code R} для типа ресурса.</li> |
| <li>{@code <resource_name>} — это либо имя файла |
| ресурса (без расширения), либо значение атрибута {@code android:name} в элементе XML (для простых |
| значений).</li> |
| </ul> |
| |
| <p>Дополнительные сведения о каждом типе |
| ресурсов и порядке создания ссылок на них см. в разделе <a href="available-resources.html">Типы ресурсов</a>.</p> |
| |
| |
| <h3>Примеры использования</h3> |
| |
| <p>В некоторых случаях ресурс необходимо использовать в качестве значения в элементе XML (например, чтобы применить графическое изображение к |
| виджету), однако вы также можете использовать ресурс в любом фрагменте XML, где ожидается простое значение. Например, |
| если имеется следующий файл ресурса, включающий <a href="more-resources.html#Color">цветовой ресурс</a> и <a href="string-resource.html">строковый ресурс</a>:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <resources> |
| <color name="opaque_red">#f00</color> |
| <string name="hello">Hello!</string> |
| </resources> |
| </pre> |
| |
| <p>Эти ресурсы можно использовать в следующем файле макета для задания цвета текста и |
| надписи:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <EditText xmlns:android="http://schemas.android.com/apk/res/android" |
| android:layout_width="fill_parent" |
| android:layout_height="fill_parent" |
| android:textColor="<strong>@color/opaque_red</strong>" |
| android:text="<strong>@string/hello</strong>" /> |
| </pre> |
| |
| <p>В этом случае в ссылке на ресурс не нужно указывать имя пакета, поскольку |
| ресурсы находятся в вашем собственном пакете. Однако для создания |
| ссылки на системный ресурс вам потребуется указать имя пакета. Например:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <EditText xmlns:android="http://schemas.android.com/apk/res/android" |
| android:layout_width="fill_parent" |
| android:layout_height="fill_parent" |
| android:textColor="<strong>@android:color/secondary_text_dark</strong>" |
| android:text="@string/hello" /> |
| </pre> |
| |
| <p class="note"><strong>Примечание.</strong> Всегда используйте строковые ресурсы, |
| поскольку ваше приложение может потребоваться перевести на другие языки. |
| Сведения о создании альтернативных |
| ресурсов (например, локализованных строк) представлены в разделе <a href="providing-resources.html#AlternativeResources">Предоставление альтернативных |
| ресурсов</a>. В разделе <a href="localization.html">Локализация</a> приведено полное руководство по локализации |
| приложения.</p> |
| |
| <p>Вы даже можете использовать ресурсы в XML для создания псевдонимов. Например, можно создать |
| элемент дизайна, который будет служить псевдонимом для другого элемента дизайна:</p> |
| |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <bitmap xmlns:android="http://schemas.android.com/apk/res/android" |
| android:src="@drawable/other_drawable" /> |
| </pre> |
| |
| <p>Это может показаться излишним, однако такой подход очень полезен при использовании альтернативных ресурсов. Узнайте подробнее о |
| <a href="providing-resources.html#AliasResources">создании псевдонимов ресурсов</a>.</p> |
| |
| |
| |
| <h3 id="ReferencesToThemeAttributes">Ссылка на атрибуты стиля</h3> |
| |
| <p>С помощью ресурса атрибута стиля можно создать ссылку на значение |
| атрибута в текущей примененной теме. Таким образом можно |
| настраивать внешний вид элементов пользовательского интерфейса, подстраивая их под стандартные варианты элементов оформления |
| текущей темы, вместо указания жестко заданных значений. Создание ссылки на атрибут стиля |
| представляет собой своеобразную инструкцию «использовать стиль, заданный этим атрибутом в текущей теме».</p> |
| |
| <p>Синтаксис для создания ссылки на атрибут стиля практически идентичен обычному формату |
| ресурса, только в этом случае вместо символа{@code @} необходимо указать вопросительный знак ({@code ?}), а тип ресурса |
| вообще необязательно указывать. Например:</p> |
| |
| <pre class="classic"> |
| ?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em> |
| </pre> |
| |
| <p>Ниже представлен пример создания ссылки на атрибут для задания цвета текста в соответствии с |
| «основным» цветом текста системной темы оформления:</p> |
| |
| <pre> |
| <EditText id="text" |
| android:layout_width="fill_parent" |
| android:layout_height="wrap_content" |
| android:textColor="<strong>?android:textColorSecondary</strong>" |
| android:text="@string/hello_world" /> |
| </pre> |
| |
| <p>Здесь атрибут {@code android:textColor} служит для задания имени атрибута стиля |
| в текущей теме. Теперь в Android используется значение, примененное к атрибуту стиля{@code android:textColorSecondary} |
| в качестве значения для {@code android:textColor} в этом виджете. Поскольку инструменту для работы с системными |
| ресурсами известно, что в этом контексте ожидается ресурс атрибута, |
| вам не нужно явно указывать его тип (который должен быть |
| <code>?android:attr/textColorSecondary</code>) — тип {@code attr} можно исключить.</p> |
| |
| |
| |
| |
| <h2 id="PlatformResources">Доступ к ресурсам платформы</h2> |
| |
| <p>В Android предусмотрен ряд стандартных ресурсов, например, стилей, тем и макетов. Для |
| доступа к этим ресурсам укажите в ссылке на ресурс имя пакета |
| <code>android</code>. Например, в Android имеется ресурс макета, который можно использовать для |
| элементов списка в виджете {@link android.widget.ListAdapter}:</p> |
| |
| <pre> |
| {@link android.app.ListActivity#setListAdapter(ListAdapter) |
| setListAdapter}(new {@link |
| android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray)); |
| </pre> |
| |
| <p>В этом примере {@link android.R.layout#simple_list_item_1} представляет собой ресурс макета, определенный |
| платформой для элементов в виджете {@link android.widget.ListView}. Вы можете использовать его вместо создания |
| собственных макетов для элементов списка. Дополнительные сведения представлены в руководстве для разработчиков, посвященном |
| <a href="{@docRoot}guide/topics/ui/layout/listview.html">представлению в виде списка</a>.</p> |
| |