Как поддерживать все различные разрешения продуктов Android - PullRequest
14 голосов
/ 19 июня 2011

Все различные разрешения различных продуктов Android сводят меня с ума.

Мое первое приложение для Android, которое я написал, было разработано так, чтобы оно поддерживало три наиболее часто используемых разрешения: 240x320 (LDPI), 320x480 (MDPI)и 480x800 (HDPI).480x854 не принес никакого вреда макету, потому что он имеет такую ​​же ширину, что и 480x800.

Я также купил следующие устройства для тестирования моих приложений для Android: Samsung Galaxy Europe (LDPI) HTC Desire Z(HDPI)

К счастью, у моей подруги есть HTC Wildfire S (MDPI), поэтому я рассмотрел большинство разрешений.

Но сегодня мой брат скачал мое приложение на своем новом HTC Sensation, который имеетеще одно разрешение 540x960 (HDPI?).Из-за которого мое приложение не показывалось так, как должно, и, вероятно, большинство планшетов не будут отображать его правильно.

То, что я сделал с моим первым приложением, - это считал плотность и затем установил параметры:

public void set_ui_parameters() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){
        textSize   = 35;    
        timeWidth  = 80;
        dayWidth   = 110;
        moneyWidth = 50;
    } else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){
        textSize   = 35;    
        timeWidth  = 53;
        dayWidth   = 73;
        moneyWidth = 33;
    } else if(metrics.densityDpi == DisplayMetrics.DENSITY_LOW){
        textSize   = 28;
        timeWidth  = 40;
        dayWidth   = 55;
        moneyWidth = 25;
    }
}

Помимо параметров, я также создал отрисовки для LDPI, MDPI и HDPI.Это хорошо работает для разрешений, описанных выше, но это зависит от разрешения экрана icw размера экрана и не работает, например, для HTC Sensatoin с 540x960.

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

Я прочитал Поддержка нескольких экранов несколько раз, но не нашел четкого ответа на эту "проблему".

Так я должен считать разрешение и установить параметры в соответствии с разрешениями вместо плотности?Это умная вещь или как вы справляетесь с этим?

Большое спасибо за вашу информацию!

Ответы [ 5 ]

30 голосов
/ 19 июня 2011

Вам не нужно делать это, чтобы поддерживать разные плотности. Что вы делаете, это создайте различные папки ресурсов:

res/values-ldpi/dimens.xml
res/values-mdpi/dimens.xml
res/values-hdpi/dimens.xml

Тогда Android решит, какой файл использовать. Вы можете иметь что-то вроде:

<!-- in values-ldpi/dimens.xml -->
<dimen name="textSize">25dip</dimen>

и ..

<!-- in values-mdpi/dimens.xml -->
<dimen name="textSize">20dip</dimen>

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

Кроме того, если вы используете dp вместо пикселей, вам вряд ли когда-нибудь придется создавать разные файлы измерений для каждой плотности. Конечно, иногда приходится, но это зависит от приложения.

1 голос
/ 13 января 2012

Единственное, что вам нужно сделать, это установить для Android: minSdkVersion значение 7 или выше в файле манифеста. Возможно, что некоторые представления будут немного отличаться, но приложение применимо и на весь экран.

0 голосов
/ 12 декабря 2011

Я тоже столкнулся с этой проблемой, за исключением того, что мое приложение представляет собой игру, в которой есть один холст SurfaceView, на который я рисую фоновые изображения и спрайты (аналогично примеру LunarLander).

То, как вы справляетесь с этим, заключается в том, чтобы расширить фоновое изображение до максимального размера, который вы готовы поддерживать (540x960), но вы храните все важные вещи (например, кнопки, текст, информацию и т. Д.) В меньшем прямоугольнике, равном 480x800. , Вы можете расширить само изображение или просто добавить рамки. Ключ в том, что там нет ничего важного.

Люди с телефонами 480x800 увидят ваше обычное приложение. Люди с телефонами 540x960 увидят небольшую дополнительную границу.

0 голосов
/ 04 июля 2011

Не беспокойтесь о небольшой разнице в разрешении: 540x960 лишь немного больше, чем 480x800.Дополнительное вертикальное пространство легко: оно дает вам больше места для ваших списков.Для горизонтального пространства, если вы правильно обрабатываете свои макеты, у вас просто будет дополнительный отступ (30 пикс. Ea) по бокам.

К сожалению, полноразмерные изображения (шириной 480) представляют собой немного большую проблему,Если вы хотите получить изображения с идеальным разрешением, вам нужно использовать scaleType = "center" , чтобы изображение центрировалось, но не масштабировалось.Если вам нужна полная ширина, вы можете использовать scaleType = "fitCenter" , чтобы заполнить ее.Это будет немного нечетко ... но на Android так много всего; -)

0 голосов
/ 19 июня 2011

Теперь я просто догадываюсь, поскольку остальная часть реализации не показана, но я предполагаю, что вы используете эти производные измерения как px

Взгляните на dp,Это по сути делает все те вещи, которые вы сделали, автоматически, для любого устройства.(Независимый от устройства пиксель)

...