Как узнать, какая телефонная поддержка поддерживает макет (hdpi, mdpi и xhpi)?

Я немного смущен тем, как определить, какие телефоны поддерживают типы макетов. Я провел некоторое исследование, но не нашел удовлетворительного ответа.

Например, я нашел следующее руководство:

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp

Однако у меня все еще есть некоторые проблемы:

  • Samsung grand (480 * 800) и HTC Wild Fire S (320 * 480) поддерживают MDPI. Эти экраны имеют очень разные разрешения, но имеют одинаковый тип макета?

  • Galaxy note 2 (1280 * 720) поддерживает HDPI. Если HD (720p) - это только HDPI, когда какое устройство/разрешение поддерживает XHDPI?

  • Я уже задал связанный с этим вопрос: Как установить макет на 7 " две разные планшеты?.

  • Моим самым важным вопросом, однако, является следующее: Как узнать, какие устройства или разрешения экрана поддерживают каждый тип макета?

Ответ 1

Android обрабатывает mdpi (160 пикселей/дюйм) в качестве базовой плотности. Итак, для устройств mdpi, 1 dp = 1 пиксель. При более высоких плотностях на пиксель больше пикселей (240 для hdpi, 320 для xhdpi).

Масштабирование AutoMatic самим Android:

Android пытается сделать графические изображения занимают одинаковые физические размеры на экране, независимо от плотности пикселей устройства. Итак, если все, что он находит, является ресурсом mdpi, а устройство - hdpi, оно будет масштабировать изображение на 240/160 = 150%, и оно удвоит размер графика для xhdpi.

Использование разных версий графики:

Если вы не хотите, чтобы это автоматическое масштабирование (что может ухудшить качество графики), вы можете просто предоставить свою собственную версию графических ресурсов для использования при более высоких плотностях. Эти графики должны быть того же размера, что Android будет масштабировать ресурс mdpi.

Примечание. пиксель/дюйм, который был сохранен в файле изображения, не имеет к этому никакого отношения. Все это основано на размещении графических файлов в каталоге ресурсов для вашего проекта. Предполагается, что любая графика, размещенная в res/drawable, будет правильно отображаться для дисплеев mdpi, а также графики, помещенные в res/drawable-mdpi. Предполагается, что файлы изображений, найденные в res/drawable-hdpi надлежащим образом отображаемый для дисплеев hdpi и т.д. Когда ваша программа запускается на определенном устройстве, Android сначала ищет графику, которая соответствует плотности экрана этого устройства. Если он не найдет его, а вместо него найдет его для другой плотности, он будет использовать его и автоматически масштабирует изображение на основе вышеуказанных правил.

Как и ldpi, mdpi и hdpi относятся к плотности экрана, которая означает, сколько пикселей может вписаться в один дюйм.

отношение в пикселях между ними:

ldpi = 1:0.75
mdpi = 1:1
hdpi = 1:1.5
xhdpi = 1:2
xxhdpi = 1:3

поэтому давайте изображение размером около 100X100:

for mdpi it should be 100X100
for ldpi it should be 75X75
for hdpi it should be 150X150
for xhdpi it should be 200X200
for xxhdpi it should be 300X300

таким образом, для экранов с одинаковым размером, но с разными DPI, все изображения кажутся одинаковыми по размеру на экране.

Ответ 2

загляните в эти детали: android управляет всем этим сам по себе, вам просто нужно предоставить макеты и изображения в относительных папках

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density