Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Разработка мобильных приложений в среде Android Studio. Учебное пособие
.pdf
3.1. Использование ресурсов
51
3.1. Использование ресурсов
3.1.1. Ссылка на ресурсы в коде приложения
Каждый тип ресурса имеет ссылку на одно из пространств
(внутренних классов), определенных в файле R.java и имеющих
соответствующие им типы в xml:
R.drawable (ему соответствует тип в xml drawable);
R.id (id);
R.layout (layout);
R.string (string);
R.attr (attr);
R.plural (plurals);
R.array (string-array).
Например, для установки ресурса в качестве графического
интерфейса в
коде Activity в методе onCreate() используется метод setContentView(R.layou
t.main_activity), в котором через R.layout.main_activity имеется ссылка на
ресурс main_activity.xml типа layout.
Таким же способом возможно получить и другие ресурсы, к примеру,
строку из файла res/values/strings.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Для того чтобы получить ссылку на этот ресурс в коде, можно
использовать выражение R.string.app_name.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView myTextView = findViewById(R.id.my_text_view);
myTextView.setText(R.string.app_name);
}

3. Работа с ресурсами
52
3.1.2. Ссылка на ресурсы в XML-файле
Назначить значения некоторым атрибутам для элементов в файлах
разметки можно в файлах ресурсов. Например, назначить атрибут Text для
TextView можно следующим образом:
<TextView
android:id="@+id/my_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
3.2. Альтернативные ресурсы
Для поддержки множества конфигураций устройств почти каждое
приложение должно предоставлять альтернативные ресурсы, например,
изображения для устройств с разной плотностью экрана, или
альтернативные ресурсы для разных языков. Для этого в Android
существуют квалификаторы конфигурации.
Для того чтобы указать альтернативы для конкретных конфигураций
набора ресурсов, необходимо выполнить следующие действия.
1. Создать новый каталог в каталоге res/ с именем следующего вида:
«имя_ресурса»-«квалификатор_конфигурации».
Можно добавлять несколько квалификаторов, разделив их знаком
дефиса.
При добавлении нескольких квалификаторов необходимо располагать
их в том же порядке, в котором они перечислены в табл. 2. Если порядок
квалификаторов нарушен, ресурсы игнорируются [28].
2. Сохранить соответствующие альтернативные ресурсы в создан-
ном каталоге. Файлы ресурсов должны иметь имена, точно совпадающие с
именами файлов ресурсов по умолчанию.
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png

3.2. Альтернативные ресурсы
53
В табл. 2 представлены квалификаторы конфигурации.
Таблица 2
Квалификаторы конфигурации
Тип
квалификатора
Пример
Описание
MCC и MNC
mcc310
mcc310-mnc004
mcc208-mnc00
и т. д.
Код страны для мобильной связи (MCC), за которым
может следовать код сети мобильной связи (MNC) из
SIM-карты устройства. Например, mcc310 – код
США для любого оставщика услуг, mcc310-mnc004 –
код США для Verizon и mcc208-mnc00 – код Франции для Orange.
Если в устройстве используется радиосвязь (телефон
GSM), значения MCC и MNC добываются из SIMкарты.
Можно также использовать только код MCC (например, для включения в приложении разрешенных в
стране ресурсов)
Язык и регион
en
fr
en-rUS
fr-rFR
fr-rCA
и т. д.
Язык задается двухбуквенным кодом языка ISO
639- 1, к которому можно добавить двухбуквенный
код региона ISO 3166-1-alpha-2 (которому предшествует строчная буква "r").
Коды не зависят от регистра; префикс r служит для
обозначения кода региона. Нельзя указывать только
код региона. Он может измениться за время работы
приложения, если пользователь изменяет свой язык в
системных настройках.
Направле-
ние макета
ldrtl
ldltr
Направление макета для приложения.
Квалификатор ldrtl означает «направление макета
справа налево». Квалификатор ldltr означает
«направление макета слева направо» и используется
по умолчанию.
Эти квалификаторы можно применять к любым ресурсам, таким как макеты, графические элементы
или значения.
Например, если требуется предоставить специальный макет для арабского языка и общий макет для
других языков, использующих написание «справа
налево» (таких как фарси или иврит), используйте
следующий код:

3. Работа с ресурсами
54
Продолжение табл. 2
Тип
квалификатора
Пример
Описание
res/
layout/
main.xml (Default layout)
layout-ar/
main.xml (Specific layout for Arabic)
layout-ldrtl/
main.xml (Any “right-to-left” language, except
for Arabic, because the “ar” language qualifier
has a higher precedence.)
Примечание. Чтобы включить в приложение функцию макета «справа налево», необходимо установить для параметра supportsRtlзначение «true» и для
параметра targetSdkVersion значение 17 или больше.
Добавлено в API уровня 17.
smallestWidth
sw<N>dp
sw320dp
sw600dp
sw720dp
и т. Д.
Основной размер экрана, указывающий минимальный размер доступной области экрана. Точнее говоря, минимальная ширина устройства – это наименьший из двух размеров экрана: высоты и ширины
(можно также называть ее «меньшей стороной»
экрана). Этот квалификатор позволяет гарантировать, что независимо от текущей ориентации экрана
приложение имеет доступную ширину пользовательского интерфейса.
Например, если для макета требуется, чтобы минимальный размер области экрана всегда был не менее
600 пикселов, можно использовать этот квалификатор для создания ресурсов этого макета, res/layoutsw600dp/. Система будет использовать эти ресурсы
только в том случае, если минимальный размер доступной области экрана составляет не менее
600 пикселов, независимо от воспринимаемой пользователем высоты или ширины.
Здесь приведены некоторые значения, которые можно использовать для экранов обычных размеров:

3.2. Альтернативные ресурсы
55
Продолжение табл. 2
Тип
квалификатора
Пример
Описание
480x800 hdpi (смартфон высокой плотности),
480 для таких экранов, как 480x800 mdpi,
(планшет/смартфон),
600 для таких экранов, как 600x1024 mdpi (планшет с
диагональю 7”),
720 для таких экранов, как 720x1280 mdpi (планшет с
диагональю 10”).
Доступная
ширина
w<N>dp
w720dp
w1024dp
и т. д.
Указывает минимальную доступную ширину экрана
в единицах dp, для которой должен использоваться
ресурс, заданный значением <N>. Это значение
конфигурации будет изменяться в соответствии с
текущей фактической шириной при изменении
альбомной/книжной ориентации.
Доступная
высота
h<N>dp
h720dp
h1024dp
и т. д.
Указывает минимальную доступную высоту экрана в
пикселах, для которой должен использоваться
ресурс, заданный значением <N>. Это значение
конфигурации будет изменяться в соответствии с
текущей фактической высотой при изменении
альбомной/книжной ориентации.
Размер экрана
small
normal
large
xlarge
small: Экраны, подобные по размеру экрану QVGA
низкой плотности. Минимальный размер макета для
маленького экрана составляет приблизительно
320x426 пикселов. Примерами являются экраны
QVGA низкой плотности и VGA высокой плотности.
normal: экраны, подобные по размеру экрану HVGA
средней плотности. Минимальный размер макета для
нормального экрана составляет приблизительно
320x470 пикселов. Примерами таких экранов
являются экраны WQVGA низкой плотности, HVGA
средней плотности, WVGA высокой плотности.
large: экраны, подобные по размеру экрану VGA
средней плотности. Минимальный размер макета для
большого экрана составляет приблизительно
480x640 пикселов. Примерами являются экраны
VGA и WVGA средней плотности.

3. Работа с ресурсами
56
Продолжение табл. 2
Тип
квалификатора
Пример
Описание
xlarge: экраны значительно крупнее обычного экрана
HVGA средней плотности. Минимальный размер
макета для очень большого экрана составляет приблизительно 720x960 пикселов. В большинстве случаев устройства с очень большими экранами слишком велики для карманного использования и, скорее
всего, относятся к планшетам. Добавлено в API
уровня 9.
Примечание. Использование квалификатора размера
не подразумевает, что ресурсы предназначены только для экранов этого размера. Если не предусмотрены альтернативные ресурсы с квалификаторами, лучше подходящими к текущей конфигурации
устройства, то система может использовать любые
наиболее подходящие ресурсы.
Предупреждение! Если все ресурсы используют
квалификатор размера, который превосходит размер
текущего экрана, система не будет использовать эти
ресурсы, и приложение аварийно завершится во
время выполнения (например, если все ресурсы
макета отмечены квалификатором xlarge, но
устройство оснащено экраном нормального
размера).
Формат
экрана
long
notlong
long: длинные экраны, такие как WQVGA, WVGA,
FWVGA;
notlong: недлинные экраны, такие как QVGA, HVGA
и VGA.
Добавлено в API уровня 4.
Формат основан исключительно на соотношении
сторон экрана («длинный» экран шире). Это не связано с ориентацией экрана.
Ориентация
экрана
port
land
port: Устройство в портретной (вертикальной)
ориентации.
land: Устройство в книжной (горизонтальной)
ориентации.

3.2. Альтернативные ресурсы
57
Продолжение табл. 2
Тип
квалификатора
Пример
Описание
Ориентация может измениться за время работы приложения, если пользователь поворачивает экран. В
разделе Обработка изменений в режиме выполнения
содержится информация о воздействии таких изменений на приложение во время выполнения.
См. также поле конфигурации orientation, которое
указывает текущую ориентацию устройства.
Режим
пользова-
тельского
интерфейса
car
desk
television
appliancewatch
car: устройство подсоединено к автомобильной докстанции;
desk: устройство подсоединено к настольной докстанции;
television: устройство подсоединено к телевизору,
обеспечивая взаимодействие с расстояния «три метра», когда пользовательский интерфейс находится на
большом экране, находящемся вдалеке от пользователя, ориентированное на управление с помощью
навигационной клавиши или другого устройства без
указателя;
appliance: устройство служит в качестве прибора без
дисплея;
watch: устройство с дисплеем для ношения на запястье.
Добавлено в API уровня 8, телевизор добавлен в API
13, часы добавлены в API 20.
Ночной
режим
night
notnight
night: ночное время;
notnight: дневное время.
Добавлено в API уровня 8.
Этот режим может измениться за время работы, если
ночной режим оставлен в автоматическом режиме
(по умолчанию), в котором режим изменяется в
зависимости от времени суток.
Плотность
пикселов на
экране (dpi)
ldpi
mdpi
hdpi
ldpi: экраны низкой плотности; приблизительно
120 dpi;
mdpi: экраны средней плотности (обычные HVGA);
приблизительно 160 dpi;
hdpi: экраны высокой плотности; приблизительно
240 dpi;

3. Работа с ресурсами
58
Продолжение табл. 2
Тип
квалификатора
Пример
Описание
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
xhdpi: экраны очень высокой плотности; приблизительно 320 dpi. Добавлено в API уровня 8;
xxhdpi: экраны сверхвысокой плотности; приблизительно 480 dpi. Добавлено в API уровня 16;
xxxhdpi: использование исключительно высокой
плотности (только значок запуска, см. примечание в
документе Поддержка нескольких экранов); приблизительно 640 dpi. Добавлено в API уровня 18;
nodpi: этот режим можно использовать для растровых графических ресурсов, которые не требуется
масштабировать в соответствии с плотностью
устройства;
tvdpi: экраны промежуточной плотности между mdpi
и hdpi; приблизительно 213 dpi. Этот режим не считается «основной» группой плотности. Он главным
образом предназначен для телевизоров, и большинство приложений в нем не нуждается – при условии,
что ресурсов mdpi и hdpi достаточно для большинства приложений, и система будет масштабировать
их при необходимости. Этот квалификатор введен в
API уровня 13.
Шесть основных уровней плотности соотносятся как
3:4:6:8:12:16 (если игнорировать плотность tvdpi).
Так, растровое изображение 9x9 в ldpi
представляется как 12x12 в mdpi, 18x18 в hdpi, 24x24
в xhdpi и т. д.
Если графические ресурсы выглядят недостаточно
хорошо на телевизоре или других определенных
устройствах, и хочется попробовать ресурсы tvdpi,
используйте масштабный коэффициент 1,33*mdpi.
Например, изображение 100 x 100 пикселов для
экранов mdpi должно иметь размер 133 x 133
пиксела для tvdpi.

3.2. Альтернативные ресурсы
59
Продолжение табл. 2
Тип
квалификатора
Пример
Описание
Примечание. Использование квалификатора плотности не подразумевает, что ресурсы предназначены
только для экранов этой плотности. Если не предусмотрены альтернативные ресурсы с квалификаторами, лучше подходящими к текущей конфигурации
устройства, система может использовать любые
наиболее подходящие ресурсы.
Тип
сенсорного
экрана
notouch
finger
notouch: устройство не оснащено сенсорным экраном;
finger: устройство оснащено сенсорным экраном,
предназначенным для ввода с помощью пальцев
пользователя.
Доступ-ность
клавиатуры
keysexposed
keyshidden
keyssoft
keysexposed: в устройстве доступна клавиатура. Если
в устройстве включена экранная клавиатура (что
весьма вероятно), то она может использоваться даже
в случае, когда аппаратная клавиатура недоступна
пользователю, даже если устройство не имеет аппаратной клавиатуры. Если экранная клавиатура отсутствует или отключена, то это квалификатор используется только в том случае, когда доступна аппаратная клавиатура.
keyshidden: устройство имеет аппаратную клавиатуру, но она скрыта, и в устройстве не включена
экранная клавиатура;
keyssoft: экранная клавиатура в устройстве включена
независимо от того, видна она или нет.
Ресурсы keysexposed независят от видимости клавиатуры, поскольку в системе включена экранная.
Основной
способ ввода
текста
nokeys
qwerty
12key
nokeys: в устройстве отсутствуют аппаратные кла-
виши для ввода текста;
qwerty: устройство оснащено аппаратной клавиату-
рой с раскладкой qwerty, независимо от того, видна
она пользователю или нет;
12key: устройство оснащено аппаратной клавиатурой с 12 клавишами, независимо от того, видна она
пользователю или нет.

3. Работа с ресурсами
60
Окончание табл. 2
Тип
квалификатора
Пример
Описание
Доступ-ность
клавиш
перемещения
navexposed
navhidden
navexposed: клавиши перемещения доступны пользователю;
navhidden: клавиши перемещения недоступны
(например, находятся за закрытой крышкой).
Это состояние может измениться за время работы
приложения, если пользователь открывает клавиши
перемещения. В разделе Обработка изменений в режиме выполнения содержится информация о воздействии таких изменений на приложение во время выполнения
Основной
несенсорный
способ
перемещения
курсора
nonav
dpad
trackball
wheel
nonav: устройство не оснащено другими средствами
перемещения курсора, кроме сенсорного экрана;
dpad: устройство оснащено навигационной клавишей;
trackball: устройство оснащено трекболом;
wheel: устройство оснащено навигационным колесиком (редко).
Версия
платформы
(уровень API)
v3
v4
v7
и т. д.
Уровень API, поддерживаемый устройством.
Например, v1 для уровня API 1 (устройства с An-
droid 1.0 или выше) и v4 для уровня API 4 (устройства с Android 1.6 или выше).
Например, в структуре проекта, представленном на рис. 20, можно
увидеть каталоги drawable и mipmap с квалификаторами, указывающими,
какие ресурсы использовать при определенной плотности пикселей.
В представленном на рис. 21 Activity имеются один ресурс Im-
ageView и три TextView. Если один из этих ресурсов в проекте представлен
в виде альтернативных ресурсов, то задаются они из кода или в файле разметки, как описано в подразд. 3.1, т.е. необходимо указать на ресурс через
класс R и тип ресурса. Далее система Android сама выберет наиболее подходящий ресурс для использования на конкретной конфигурации устройства.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
