Как Android извлекает чертежи, если в res нет соответствующих рисунков?

Мне интересно, как Android извлекает и отображает чертежи, если в соответствующей папке нет точно масштабируемого чертежа?

Например, предположим, что я пытаюсь отобразить рисуемый объект на устройстве с разрешением hdpi, большим размером и работающим под управлением Android 2.3. Drawable, который ищет приложение, доступен в форматах xhdpi, mdpi, xlarge и large, но не hdpi или large (по какой-либо причине).

В частности, мне интересно, как Android решает, какой из них выбрать? Я бы предположил, что он отдаст предпочтение более крупному рисунку (xhdpi или xlarge), но отдает ли он предпочтение DPI или размеру экрана? А также применяет ли он масштабирование к рисунку, как указано в http://developer.android.com/design/style/iconography.html (т. е. рисунок xhdpi будет отображаться как 1,5/2 от его фактических размеров)? Если да, загружает ли он исходный или масштабированный рисунок в память?

Кроме того, поскольку размер экрана (большой, xlarge) устарел в Android 3.2+, как бы вы назвали доступные для рисования папки для приложения, работающего под управлением 2.2+? Будет ли drawable-large-sw600dp работать на всех устройствах или копировать drawables в drawable-large и drawable-sw600dp?

Я знаю, что подобные вопросы задавались, но они менее сложны и менее конкретны, поэтому любое понимание было бы здорово!


person Phazor    schedule 28.12.2013    source источник


Ответы (1)


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

Во время выполнения система обеспечивает наилучшее возможное отображение на текущем экране с помощью следующей процедуры для любого заданного ресурса:

  1. Система использует соответствующий альтернативный ресурс В зависимости от размера и плотности текущего экрана система использует любой ресурс, зависящий от размера и плотности, предоставленный в вашем приложении. Например, если устройство имеет экран высокой плотности и приложение запрашивает ресурс для рисования, система ищет каталог ресурсов для рисования, который лучше всего соответствует конфигурации устройства. В зависимости от других доступных альтернативных ресурсов лучше всего подходит каталог ресурсов с квалификатором hdpi (например, drawable-hdpi/), поэтому система использует ресурс drawable из этого каталога.

  2. Если соответствующий ресурс недоступен, система использует ресурс по умолчанию и масштабирует его по мере необходимости, чтобы он соответствовал текущему размеру и плотности экрана. Ресурсы «по умолчанию» — это те, которые не помечены квалификатором конфигурации. Например, ресурсы в drawable/ являются ресурсами для рисования по умолчанию. Система предполагает, что ресурсы по умолчанию предназначены для базового размера и плотности экрана, то есть для нормального размера экрана и средней плотности. Таким образом, система масштабирует ресурсы плотности по умолчанию вверх для экранов с высокой плотностью и вниз для экранов с низкой плотностью, в зависимости от ситуации. Однако, когда система ищет ресурс для конкретной плотности и не находит его в каталоге для конкретной плотности, она не всегда будет использовать ресурсы по умолчанию. Вместо этого система может использовать один из других ресурсов, зависящих от плотности, чтобы обеспечить лучшие результаты при масштабировании. Например, при поиске ресурса с низкой плотностью, а он недоступен, система предпочитает уменьшить масштаб версии ресурса с высокой плотностью, поскольку система может легко масштабировать ресурс с высокой плотностью до низкой плотности с помощью коэффициент 0,5 с меньшим количеством артефактов по сравнению с масштабированием ресурса средней плотности с коэффициентом 0,75. Дополнительные сведения о том, как Android выбирает альтернативные ресурсы, сопоставляя квалификаторы конфигурации с конфигурацией устройства, см. в статье Как Android находит наиболее подходящий ресурс.

введите здесь описание изображения

person sachin10    schedule 28.12.2013
comment
Спасибо, но я полностью осознаю это. Я спрашиваю, что происходит, когда приложение запускается на устройстве, для которого вы не предоставили идеальные ресурсы. - person Phazor; 28.12.2013
comment
Спасибо за исчерпывающий ответ. Я так понимаю, это означает, что __DPI имеет приоритет над ссылкой на размер? - person Phazor; 30.12.2013