Android: какую единицу размера элемента пользовательского интерфейса использовать (если dp не работает) - PullRequest
3 голосов
/ 28 марта 2012

Я разрабатываю приложение, которое будет использоваться только на Samsung Galaxy SII и на вкладке Samsung Galaxy 7.7.Размеры всех элементов пользовательского интерфейса указаны в dp в соответствии с рекомендациями руководства разработчика Android.Как я понял, это будет гарантировать, что элементы сохраняют одинаковый воспринимаемый размер для пользователя на разных экранах.Моя проблема в том, что все элементы пользовательского интерфейса выглядят намного меньше на 7,7-дюймовом устройстве (примерно на 2/3 от того, что они выглядят на SII).

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

Но действительно ли это правильноподход к использованию любого из этих 3 модулей, и если да, то почему Android рекомендует dp's ??

Я надеюсь, что кто-нибудь там может уточнить это:)

Ответы [ 2 ]

1 голос
/ 28 марта 2014

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

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

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

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

Моя проблема в том, что все элементы пользовательского интерфейса выглядят намного меньше на 7,7-дюймовом устройстве (примерно на 2/3 от того, как они выглядят на SII).

Samsung Galaxy S2 имеет физическое dpi 218 и сообщает 240 как densityDpi, то есть все измерения dp на 10% больше, чем на устройстве, где физическое dpi точно соответствует плотности Dpi.

Samsung Galaxy Tab 7.7 имеет физическое dpi 197 и сообщает 160 как плотность Dpi, поэтому здесь все измерения dp составляют 81% от того, что было бы на устройстве, где физическое dpi точно соответствует плотности Dpi.

Как видите, эти два устройства отличаются от идеальных значений dpi и в разных направлениях. Так что, если сравнить эти два устройства друг с другом, все, нарисованное с помощью dp, будет выглядеть примерно на 35% больше в Galaxy S2 по сравнению с Galaxy Tab 7.7

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

Вам следует избегать использования пикселей, так как это не учитывает dpi устройства, так как вы заметите, что все будет намного больше на вкладке galaxy 7.7, поскольку она имеет более низкое dpi, чем galaxy s2.

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

В некоторых устройствах эти устройства не могут быть надежно использованы, но, поскольку вы разрабатываете приложение, которое будет использоваться только на известных устройствах, у которых нет этой проблемы, использовать их безопасно. Подробнее об этом см. Мой ответ на вопрос Почему Lint отображает предупреждение при использовании единиц измерения в (дюймах) или миллиметрах (мм)?

Но действительно ли это правильный подход к использованию любых из этих 3-х единиц, и если да, то почему Android рекомендует dp's ??

Правильно использовать и мм / дюйм, и дп, но они работают немного по-другому, поэтому вы должны учитывать, что важно для вас, когда вы выбираете, какую единицу вы должны использовать.

Если что-то должно быть примерно х дюймов / мм, но это не имеет значения, если оно немного не так, лучше использовать модуль dp. Поскольку блок dp привязан к блоку плотности, к которому принадлежит устройство, можно узнать, сколько пикселей x dp отображается для каждого блока плотности. Это означает, что можно создавать графику с учетом каждого сегмента плотности, которая затем может использоваться приложением без необходимости масштабирования графики.

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

1 голос
/ 28 марта 2012

Dp работает в большинстве случаев, но на вашем месте я бы указывал разные папки макетов, в этом случае layout-xlarge / для вашего 7,7-дюймового устройства и layout-normal / для вашего Galaxy SII.

Затем продублируйте XML-файлы макета и поместите в эти папки и укажите положение / размеры в соответствии с устройством, которое будет его использовать.

enter image description here

Информация отсюда: http://developer.android.com/guide/practices/screens_support.html#support

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...