Изображения в случае поддержки нескольких экранов в Android - PullRequest
2 голосов
/ 01 декабря 2010

У меня путаница относительно поддержки нескольких экранов в Android.Я прочитал статью о поддержке нескольких экранов на форуме разработчиков Android.У меня вопрос, есть ли в приложении 15-20 изображений, которые должны отображаться в полноэкранном режиме на экране устройства.Теперь, если я хочу поддерживать все экраны, что я должен поместить в три папки для рисования ldpi, mdpi и hdpi.Вот что я сделал

В ldpi - изображения с разрешением 240x320, mdpi - изображения с разрешением 320x480, hdpi - изображения с разрешением 720x800.(Я использую одинаковые плотности для всех трех разрешений). Я думаю, что это неправильный подход.

Что именно я должен делать?Поместите изображения с разным разрешением в drawable-ldpi, drawable-mdpi и drawable-hdpi, как указано выше, или я должен использовать изображения различной плотности 120 dpi, 160 dpi и 240 dpi.Если я использую изображения различной плотности, какое должно быть их разрешение (должно быть разрешение 120 точек на дюйм, равное 240х320, разрешение 160 точек на дюйм, 320х480 и разрешение 240 точек на дюйм, равное 480х800).Или, если я использую разные изображения в dpi, их разрешение должно быть одинаковым (320x480) для всех плотностей.

С уважением, Anuj

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

Anujprashar, нет простого ответа на ваш вопрос.Спецификации различных плотностей (hdpi, mdpi, ldpi) относятся только к среднему диапазону плотностей (т. Е. Hdpi составляет около 240 ppi).Однако hdpi может относиться к большому количеству разных разрешений (например, Motorola Droid - это hdpi, разрешение 480x854; Nexus One - это hdpi, разрешение 480x800).Таким образом, нет изображения фиксированного размера, которое вы можете использовать, чтобы идеально подходить для всех устройств на весь экран.

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

Или, проще, если вы не хотите, чтобы они отображались 1: 1 при исходном разрешении в пикселях вы можете просто установить scaleType для ImageView на centerCrop, а его ширину и высоту на fill_parent.Это позволит расширить (или сжать) изображение, чтобы оно соответствовало контейнеру, обрезая пиксели, если соотношение сторон не является правильным.

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

1 голос
/ 01 декабря 2010

В идеале у вас должны быть графики с разной плотностью для разных экранов. Вы можете использовать размеры, которые вы упомянули для ваших изображений. Но вы также можете предоставить только изображения с высоким разрешением, и они будут уменьшены в соответствии с плотностью экрана устройства пользователя.

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

И, наконец, вы можете использовать виджет ImageView для правильного масштабирования изображения на разных устройствах.

...