Как система находит наиболее подходящий ресурс?

#android

#Android

Вопрос:

У меня есть hdpi устройство.
DPI: hdpi, плотность: 1.5, densityDpi: 240, sw: 320

values и values-xxhdpi папки. Почему Android берет dimes values-xxhdpi не из values ?

Я предположил, что он должен взять его из папки меньшего размера. И значения по умолчанию — mdpi, а также hdpi ближе к mdpi, а затем к xxhdpi.

Не могли бы вы сказать мне, где я ошибаюсь?

Ответ №1:

Плотности обрабатываются иначе, чем другие ограничения набора ресурсов.

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

Когда дело доходит до поиска совместимого ресурса, если вы используете плотности в качестве ограничения для типа (например, values ), Android ведет себя так, как будто он может преобразовать ресурс из одной плотности в другую… даже для типов ресурсов, где это невозможно. Итак, Android выбирает ближайшую плотность, используя любой алгоритм, который он будет использовать для выбора изображения для преобразования, даже если вы используете определитель плотности для чего-то другого, кроме изображений.

Использование плотности в качестве определителя для чего-либо, кроме drawable or mipmap , является запахом кода. Вы вряд ли получите то, что хотите.

Комментарии:

1. Привет, Марк, спасибо за ответ. Итак, я должен использовать values-large или values-sw600dp , скорее, это values-xxhdpi , верно?

2. @Yvgen: Да. Изменение значений на основе размера безопасно; изменение значений на основе плотности менее безопасно.