Как вы определяете размеры в пикселях базовой линии для Android? - PullRequest
2 голосов
/ 10 ноября 2011

Короткий вопрос

У меня в макете Android XML есть кнопка 50 на 40 точек. Какие размеры в пикселях для рисования нужно разместить в папке ресурсов mdpi?

Длинный вопрос

Допустим, у меня есть кнопка 50 x 40 dip.

<Button
    android:layout_width="50dip"
    android:layout_height="40dip"
    android:background="@drawable/someImage" />

Я доволен физическим размером этой кнопки на моем телефоне. У меня вопрос: когда я создаю someImage.png в Photoshop, как мне выбрать размеры изображения в пикселях? В настоящее время я просто делаю его гигантским изображением размером 500 на 400 пикселей и помещаю его в папку ресурсов для рисования по умолчанию, потому что она работает нормально на всех телефонах и планшетах, на которых я тестировал.

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

Задача № 1 - Базовый график

enter image description here

Эта диаграмма показывает мне только относительные размеры графики, которые мне нужно поместить в каждую папку ресурсов для рисования. Тем не менее, он не сообщает мне размер в пикселях, который необходим для создания моей базовой графики в формате mdpi, по отношению к которой все остальные графические изображения относятся к.

Проблема № 2 - фрагментация плотности экрана

Плотно-независимый пиксель эквивалентен одному физическому пикселю на Экран 160 точек на дюйм, который является базовой плотностью, принятой системой для "средней" плотности экрана. Во время выполнения система прозрачно обрабатывает любое масштабирование дп единиц, по мере необходимости, на основе фактического плотность экрана в использовании. Преобразование дп единиц на экран пикселей просто: px = dp * (dpi / 160). Например, на 240 точек на дюйм Экран, 1 дп равен 1,5 физических пикселей. Вы всегда должны использовать дп единиц при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение ваш пользовательский интерфейс на экранах с различной плотностью.

Этот маленький кусочек говорит мне, что изображение шириной 50dip на экране 160dpi будет иметь ширину 50px. Так здорово, говорите вы. Я должен сделать мою графику MDPI (160 точек на дюйм подпадает под MDDP) шириной 50 пикселей в Photoshop. Ну, это не так просто, потому что не все телефоны с mdpi имеют разрешение 160 точек на дюйм. Что делать, если у моей мамы телефон с разрешением 167 точек на дюйм? Тогда моя картинка шириной 50dip будет выглядеть как 52.1875px на ее телефоне, что может вызвать некоторые странные размытые артефакты. Так что мне делать? Должен ли я смоделировать базовый mdpi на телефоне моей матери с разрешением 167 точек на дюйм или на модели идеального лабораторного телефона с разрешением 160 точек на дюйм, который, возможно, даже не существует в реальном мире?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2011

Когда дело доходит до проблемы № 2 ...

Должен ли я смоделировать базовое значение mdpi на телефоне моей матери с разрешением 167 точек на дюйм или на модели идеального лабораторного телефона с разрешением 160 точек на дюйм, который, возможно, даже не существует в реальном мире?

Вы должны смоделировать его, нацеливаясь на идеальный лабораторный телефон с разрешением 160 точек на дюйм. Это в значительной степени то, что эта статья пытается нам рассказать. Я считаю, что ldpi, mdpi и т. Д. Являются «обобщенными» значениями плотности, и графическое ядро ​​ОС Android отвечает за правильную компенсацию фактического значения dpi для любого устройства. На самом деле нет другого способа сделать это, кроме как заставить производителей устройств использовать авторизованные компоненты экрана (что не произойдет).

Что касается проблемы # 1, я бы посмотрел на соотношение ширины и высоты вашей кнопки и выбрал фактические размеры в пикселях на основе этого , но больше , чем у 'модели' 50 x 40 пикселей Соотношение W: H составляет 5: 4, поэтому я бы выбрал ширину, делимую на 5, но больше 50, возможно, 60, что удобно делить на 5 и 4. Это будет означать создание изображения кнопки размером 60 x 48 px, оба из которых при умножении на 0,75 для целей ldpi приводят фактические значения (45 x 36 пикселей).

0 голосов
/ 10 ноября 2011

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

Я бы предложил что-то вроде этого:

Создайте макеты (каркасы) для устройства mdpi 320x480, создайте красивые дизайны с максимальным разрешением, которое вы собираетесь поддерживать. Затем подумайте - какие активы нужно растянуть, минимальные и максимальные размеры и т. Д. Для поддержки разных экранов. Не просто нарезайте ресурсы, как они появляются в вашем дизайне, .9 патч их, оптимизируйте их.

Используйте ресурсы из ваших проектов с высоким разрешением и позвольте Android масштабировать их для вас - вы выложили все, чтобы уместиться на устройствах mdpi (не поддерживают ldpi ... urggghhhh ....). Фон кнопки не должен быть установленного размера, это должен быть 9-исправленный png с минимальными размерами - содержимое (текст или значок) / макет доступного пространства / xml определят окончательный размер.

Возможно, я просто болтаю.

0 голосов
/ 10 ноября 2011

Я основываю всю свою графику, используя 320x480 в качестве общего размера экрана.Плотность пикселей на самом деле не играет роли, пока я не буду готов экспортировать графику с другой плотностью.В итоге получается 480 * 1,5 и т. Д.

Еще один момент, когда вы делаете 50dip x 40dip, то, что вы на самом деле говорите, это 50px x 40px с использованием базовой линии 320px x 480px.Android будет масштабировать изображения в определенной степени для вас, поэтому то, что вы делали, не выглядит наполовину плохо.В этом случае вы должны сделать кнопку 50px x 40px для mdpi и 75px x 60px (это x 1.5) для hdpi и т. Д.

...