2013-07-12 3 views
4

Я заметил, что реальное устройство выбирает другой ресурс из этого затмения в превью. Например я создал Drawable ресурсы для устройств с наименьшей шириной 720dp, какПроблема с выделенными ресурсами для Android

  • drawable-sw720dp-mdpi для галактики Samsung 1280x800 MDPI
  • drawable-sw720dp-hdpi для Nexus 10 2560x1600 ИПЧР.

Но Galaxy Tab Samsung 1280x800 MDPI поднимает drawable-sw720dp-hdpi вместо drawable-sw720dp-mdpi?

То же самое с другими устройствами. Если есть ресурсы drawable-sw320dp-hdpi, drawable-sw320dp-xhdpi, Sony Ericsson xperia-ARC 854x480 hdpi поднимает drawable-sw320dp-xhdpi?

Я не могу сохранить drawable-hdpi ресурс, потому что есть размер экрана 5'5 дюймов. Например, samsung galaxy 1280x720 hdpi 5'5 дюймов, а для таких устройств существует другой графический дизайн, поэтому оба устройства 854x480 hdpi и 1280x720 hdpi будут использовать один и тот же каталог drawable-hdpi wich неприемлем.

Любые идеи?

+0

Я пытался создать это Drawable папки в проекте образца и изменять различные устройства в графической схеме затмения, появление только правильно, устройство выбрать правильную вытяжку. – faylon

+1

Да, в графическом макете Eclipse выбирается правильное выделение. Но реальное устройство выбирает разные!Я положил изображение с текстом «sw720dp-mdpi» в drawable-sw720dp-mdpi, а другой с текстом «sw720dp-hdpi» в drawable-sw720dp-hdpi. Устройство 10 дюймов 1280x800 mdpi показало мне картинку с текстом «sw720dp-hdpi», но DisplayMetrics вернула мне значение плотности 160 (mdpi). Меня это удивило. – vladyman

+0

Как вычислить значение 720 drawable-sw720dp для разрешения 2560 * 1600? – Hanzo

ответ

0

Некоторое время назад у меня была схожая проблема при написании анимированных обоев, которые использовали холст и растровые изображения. Я не мог добиться того, что хотел, используя папки макета по умолчанию.

В моем случае, например, устройство средней плотности с экраном xlarge (1280x800) должно использовать те же ресурсы, что и высокая плотность с обычным экраном (600x1024).

Я решил написать собственное решение, разместив ресурсы на три группы и выбрав их с помощью пользовательских правил.

DisplayMetrics metrics = resources.getDisplayMetrics(); 
int screenSize = resources.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK; 

switch (metrics.densityDpi) { 
case DisplayMetrics.DENSITY_LOW: 
    if (screenSize == Configuration.SCREENLAYOUT_SIZE_SMALL || screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL) { 
     return new SmallResourceProvider(resources); 
    } 
case DisplayMetrics.DENSITY_MEDIUM: 
    if (screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL) { 
     return new MediumResourceProvider(resources); 
    } 
default: 
    return new LargeResourceProvider(resources); 
} 

Возможно, это будет полезно в вашем случае.

+0

Спасибо за идею. Я попробую. – vladyman

+0

vladyman, это вам помогло? – Evmorov

0

У меня также был такой же странный вопрос. В моем случае вкладка Galaxy GT P7500 собирала изображения из папки drawable-sw720dp-XXHDPI, так как у меня также была папка XXHDPI. Если я удалил XXHDPI, он подберет следующее ниже, которое является папкой XHDPI.

Проблема с квалификатором swxxxdp для выдвижных папок. Если я удалю ширину экрана и использую только один набор изображений всех плотностей, проблема, похоже, будет решена. Однако я хотел иметь различный набор чертежей для 7-дюймовых и 10-дюймовых устройств. Я использовал другой набор имен для 10-дюймовых изображений и 7-дюймовых изображений и использовал 2 разных набора макетов с квалификаторами sw600dp и sw720dp. Вот моя текущая структура, которая хорошо работает. Однако это не ожидаемый способ использования ресурсов, так как андроид рекомендует externalizing the drawables. к сожалению, я не мог найти лучшего решения.

layout-land 
layout-sw600dp-land (uses image.png) 
layout-sw720dp-land (image_large.png) 

и вводимый коэффициент,

drawble-mdpi (image.png & image_large.png) 
drawable-hdpi 
drawable-xhdpi 
drawable-xxhdpi 
Смежные вопросы