Папки ресурсов Android по размеру экрана - PullRequest
0 голосов
/ 07 мая 2011

Я разработал Android-игру, которая поддерживает практически все разрешения на рынке (240x320, 320x480, 480x800, 480x854, 600x1024).

Моя проблема в том, что когда я пытаюсь поддерживать планшеты, я не понимаю, почему Android делит ресурсы на разные папки (hdpi, ldpi, mpdi, large-mdpi, ...), когда эти классификаторы бесполезны ! У меня есть несколько графических наборов (по ширине), но я схожу с ума, например, с планшетами 480x800 с плотностью mdpi или ldpi! Невозможно добраться до каждого устройства.

Итак, знаете ли вы какой-нибудь способ разделения рисованных / растровых изображений в папках, но доступ к ним возможен только через разрешение? Да, я знаю растровое псевдоним, но это не решение.

Спасибо

1 Ответ

3 голосов
/ 07 мая 2011

Я полагаю, вы смешиваете размер экрана с плотностью пикселей:

Из руководства разработчика:

  • Платформа поддерживает наборквалификаторы ресурсов, которые позволяют вам предоставлять ресурсы, зависящие от размера и плотности, если это необходимо.Квалификаторы для ресурсов определенного размера: small, normal, large и xlarge.Для ресурсов, специфичных для плотности: ldpi (низкий), mdpi (средний), hdpi (высокий) и xhdpi (сверхвысокий).Спецификаторы соответствуют обобщенным значениям плотности, описанным в Диапазон поддерживаемых экранов , выше.
  • Платформа также предоставляет элемент манифеста <supports-screens>, атрибуты которого android:smallScreens, android:normalScreens, android:largeScreens и android:xlargeScreens позволяют указать, какие обобщенные размеры экрана поддерживает ваше приложение.Другой атрибут, android: anyDensity, позволяет указать, включает ли ваше приложение встроенную поддержку нескольких плотностей.

Редактировать: добавлены мои комментарии к ответу.

Используя пример из комментария, Archos представляет собой 7-дюймовый экран, в то время как Nexus One имеет 3,7-дюймовый экран. При том же количестве пикселей плотность пикселей на Nexus One удваивается.Помните, что dpi означает количество точек на дюйм. Это означает, что в Archos одно и то же изображение будет в два раза больше, чем в Nexus One .

Различия в размерах экрана должны обрабатываться в макете .Используйте res/layout-normal для Nexus One и res/layout-large для Archos.Таким образом, вы будете иметь контроль над полным макетом для разных размеров экрана (возможно, вам нужно ограничить некоторые виджеты, которые будут чрезмерно большими в Archos) и решить, хотите ли вы сохранить фиксированный размер для ваших объектов рисования или расширить их какобязательно.

В качестве альтернативы, если вы действительно хотите сохранить размер, пропорциональный размеру экрана, независимо от размера экрана и без растяжения изображений , то вы можете создать два набора изображений, а именно image1-normal.png, image2-normal.png и image1-large.png, image2-large.png и т. д., как в папках res/drawable-mdpi, так и res/drawable-hdpi, к которым можно получить доступ из файлов XML в res/layout-normal и res/layout-large.

Таким образом, полные требования должны обрабатываться комбинацией макетов и чертежей:

  • Nexus One : layout-normal, drawable-hdpi
  • Archos 7 : layout-large, drawable-mdpi
  • Xoom : layout-xlarge, drawable-mdpi
...