Статьи

Android с нуля: как использовать ресурсы в приложении

Любое разрабатываемое вами приложение должно включать какие-то локальные ресурсы и значения, такие как строки, графические ресурсы (даже если это просто значок приложения) и цвета. В этом руководстве вы узнаете о ресурсах в Android и о том, как использовать их в своих приложениях для отображения контента пользователям, работы с устройствами разных размеров и поддержки пользователей на разных языках.

Тебе легче учиться с видео? Почему бы не проверить наш курс:

  • Android
    Начало работы с Android

Когда вы создаете проект в Android Studio, в вашем проекте есть два основных каталога для исходных файлов: java и res . Здесь Res обозначает ресурсы и, как следует из названия, содержит ресурсы для проекта. В контексте Android ресурс является файл, представляющий что-то, что может быть нарисовано на экране, файл макета для ваших классов или значение, к которому можно получить доступ в вашем приложении, такое как шестнадцатеричное значение строки или цвета. В этом разделе вы узнаете о различных типах ресурсов, доступных для вашего приложения.

Чтобы использовать ресурсы в проекте Android, вам нужно организовать их в подкаталоги в папке res . Структура каталогов ресурсов стандартного проекта Android может выглядеть примерно так:

Пример каталога ресурсов в Android

Существует ограниченное количество имен каталогов, которые поддерживаются системой ресурсов Android, и их понимание необходимо при продолжении разработки приложений для Android. Давайте посмотрим на них более подробно.

  • animator : каталог ресурсов аниматора может содержать файлы XML, которые определяют анимацию для объектов View в вашем приложении. Вместо того, чтобы снова и снова определять анимацию в своем коде Java, вы можете импортировать файл XML аниматора в любое место, где вам нужно использовать определенную анимацию. Если вы решите изменить эту анимацию позже, вы можете изменить ее в одном месте приложения, а не во многих.
  • Цвет : хотя вы можете сохранить шестнадцатеричные значения цвета в каталоге значений, каталог цветов используется для хранения файлов XML, которые соотносят информацию о состоянии с определенными цветами . Это полезно, если вам нужно изменить цвет текста или фона представления при касании, чтобы предоставить обратную связь пользователю.
  • Drawable : если вашему приложению требуются локальные графические ресурсы, такие как JPG и PNG, вам нужно поместить их в папку Drawable . Это также место, где вы размещаете XML-файлы, которые определяют рисование формы и вектора , или изображения, нарисованные в коде.
  • mipmap : аналогично drawable, каталог mipmap принимает элементы растрового изображения, но он используется специально для значка средства запуска приложений. Это необходимо, потому что Android использует изображения на один размер больше, чем то, что устройство обычно использует для значков запуска.
  • layout : каталог layout содержит файлы XML, которые определяют пользовательские интерфейсы вашего приложения.
  • menu : XML-файлы меню используются для определения панели действий, а также навигационных меню и подменю . Эти ресурсы размещены в каталоге ресурсов меню .
  • raw : каталог raw используется для хранения произвольных файлов raw для вашего приложения, таких как аудио, видео и текстовые файлы. Это обеспечивает простой способ доступа к файлам, хотя если вам нужен доступ к исходному имени файла или иерархии каталогов, вам следует рассмотреть возможность размещения ваших необработанных файлов в каталоге ресурсов Android.
  • xml : в этом каталоге хранятся произвольные файлы XML, используемые Android для различных задач, таких как определение конфигураций поиска или внешних возможностей, таких как использование Android Auto .

Хотя приведенный выше список доступных каталогов ресурсов довольно длинный, есть еще один каталог, который вы будете часто использовать в качестве разработчика Android, и это каталог значений . Каталог значений может содержать множество файлов XML, состоящих из простых значений, которые используются в ваших приложениях, включая:

  • массивы : простые объекты массива, которые можно прочитать в вашем приложении.
  • цвета : именованные шестнадцатеричные значения цвета, которые могут использоваться в разных местах в вашем приложении.
  • измерения : Размеры могут определять все, что связано с размером в Android, включая размеры текста и отступов.
  • целые числа : если есть определенные целые числа, которые вам нужно использовать в вашем приложении, вы можете сохранить их в файле ресурсов целых чисел, чтобы их было легко найти и изменить позже в процессе разработки.
  • Строки : Строки являются необходимостью в любом приложении Android, которое вы создаете. Вместо того, чтобы распространять их по базе кода, вы можете хранить строки в файле значений strings.xml .
  • множественное число : Подобно строкам, множественное число позволяет вам предоставлять альтернативные строки, когда число передается в функцию поиска. Это обрабатывает ситуации, когда квантификатор строки должен меняться в зависимости от количества элементов, которые он представляет.
  • Стили . Любое создаваемое вами приложение должно иметь согласованный внешний вид, чего можно добиться с помощью файла styles.xml . Используя стили, вы можете переопределить внешний вид компонентов по умолчанию и предопределенные атрибуты, которые могут быть связаны с различными объектами View в файлах макета.

Как видите, структура ресурсов в Android обширна. Продолжая разрабатывать приложения, вы обнаружите, что все больше и больше файлов и значений ресурсов используются для ускорения и упрощения разработки и обслуживания ваших приложений.

Теперь, когда вы знаете, как добавлять ресурсы в свое приложение, вам нужно иметь к ним доступ. Всем ресурсам, хранящимся в вашем приложении, автоматически присваивается идентифицируемое имя, состоящее из типа ресурса, такого как рисующий или макет , и идентификатора в R- файле приложения. Файл R — это файл, созданный инструментом упаковки активов Android или aapt во время компиляции. Это сгенерированное имя можно использовать для доступа к ресурсу в коде Java или в другом файле ресурса XML.

Многие объекты в Android создаются с учетом идентификаторов ресурсов и принимают идентификатор для ресурса, чтобы использовать этот ресурс. Примером этого является настройка ImageView для использования ресурса рисования путем передачи идентификатора рисования R.

1
mImageView.setImageResource(R.drawable.test);

Точно так же объект MediaPlayer (используемый для воспроизведения аудио или видео мультимедиа) может быть создан для воспроизведения необработанного мультимедийного файла путем передачи R id файла.

1
MediaPlayer.create(getActivity(), R.raw.sample_media)

В то время как большое количество объектов принимает идентификатор ресурса, бывают случаи, когда вы хотите получить исходный ресурс в своем коде. Вы можете сделать это, используя метод getResources() доступный в объекте Context Android. Это возвращает объект Resources с несколькими методами для доступа к локальным ресурсам приложения, таким как getColor() и getDrawable() .

1
2
getResources().getColor(R.color.colorPrimary);
getResources().getDrawable(R.drawable.kittens);

Большую часть времени, когда вы используете ресурсы, это будет в других файлах XML. Определяя цвета, стили, текст или любой другой ресурс, который используется в различных местах вашего приложения, он упрощает сопровождение, позволяя вам изменить одно значение и заполнить его во всем приложении. К счастью, вы можете получить доступ к ресурсам в атрибуте XML, передав идентификатор в поле, которое ожидает идентификатор ресурса.

1
2
3
4
5
6
7
<TextView
   android:id=»@+id/tv_test»
   android:layout_width=»wrap_content»
   android:layout_height=»wrap_content»
   android:background=»@color/colorPrimary»
   android:text=»@string/title»
   style=»@style/TitleStyle»/>

Практически каждое создаваемое вами приложение должно обрабатывать устройства различных размеров, конфигураций и языков пользователя. Добавляя определенные квалификаторы в конец каталога ресурсов, система Android отдает приоритет этим ресурсам, когда выполняются определенные условия.

Чтобы избежать пикселизации, ресурсы растрового изображения, которые вы создаете для своих приложений, должны быть сделаны для определенных плотностей пикселей. Добавляя -ldpi , -mdpi , -hdpi и другие квалификаторы к папкам каталогов, как показано для mipmaps на изображении в начале этой статьи, система Android знает, какие ресурсы использовать для любого конкретного устройства, на котором работает ваше приложение.

Вы можете создавать отдельные каталоги значений для каждого языка, поддерживаемого вашим приложением, добавляя код языка в конец имени каталога, например values-fr или values-es для французского и испанского языков.

Когда для пользователя выбран один из этих языков, система предоставляет пользователю любые значения в новом каталоге ресурсов, а не значения по умолчанию. Это полезно для замены строковых ресурсов правильными переводами.

Вы можете добавить -land в каталог ресурсов, чтобы эти значения переопределяли значения по умолчанию, когда устройство находится в альбомном режиме. Вы также можете определить минимальную ширину устройства для каталога ресурсов для переопределения по умолчанию для поддержки планшетов, добавив -sw600dp для планшетов среднего размера (например, Nexus 7) и -sw720dp для планшетов большего размера.

Любое создаваемое вами приложение будет включать ресурсы и понимание того, как получить к ним доступ и поддерживать различные конфигурации устройств, является важной частью работы разработчика Android. В этой статье вы узнали, какие ресурсы можно включить в приложение, как получить к ним доступ в Java и XML и как переопределить ресурсы в определенных ситуациях.