Android: неправильный размер для видов с размерами в мм или дюймах - PullRequest
3 голосов
/ 03 июня 2011

У меня есть кнопка с layout_height 10 мм, которая выглядит правильно на большинстве устройств, но, например, на Lg Optimus 2X и Motorola Defy кнопки имеют примерно половину размера:

Я получил информацию DisplayMetrics на этих устройствах, и вот краткий обзор:

HTC Desire Z:       480x800, density : HIGH, xdpi: 254.0, ydpi: 254.0 
Motorola Defy:     480x854, density : HIGH, xdpi: 96.0, ydpi: 96.0
Samsung Galaxy S2: 480x800, density : HIGH, xdpi: 217.71428, ydpi: 218.49463 
LG Optimus 2X:     480x800, density : HIGH, xdpi: 160.0, ydpi: 160.0

Как видите, у Desire Z и Samsung разумное значение x / y-dpi. вызовы «defy» и «optimus» дают явно неверные значения, которые, как я полагаю, являются причиной неправильного размера.

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

Или рекомендуется вообще не использовать мм / размеры?

Ответы [ 2 ]

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

Исходя из дополнительной информации, которую вы предоставили в ответе Кристиона Сетади, я говорю вам, вероятно, следует установить размер кнопки 48 dp .Модуль dp учитывает dpi устройства, поэтому объекты, указанные с использованием dp, будут иметь одинаковый физический размер на устройствах с разным разрешением и разрешением dpi.

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

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

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

Вы не должны создавать отдельные файлы макетов для этих устройств, потому что есть больше устройств, которые сломаны таким же образом.Я обнаружил, что Galaxy Mini и Galaxy S3 Mini - два других телефона, которые ведут себя одинаково.

Или рекомендуется вообще не использовать размеры в мм / мм?

Вы можете использовать мм / дюйм, если у вас есть что-то, что действительно должно быть определенным числом мм или дюйм.В этом случае использование dp не будет работать на всех устройствах, поскольку число dp-per-inch варьируется между устройствами.Подробнее об этом см .: Android: какую единицу размера элемента пользовательского интерфейса использовать (если dp не работает)

При использовании мм / дюйм вы должны быть осторожны с "сломанными" устройствамикоторый сообщает неверные значения для xdpi / ydpi.

Один из способов обойти это может быть использование мм или дюймов для устройств, где DisplayMetrics.xdpi / DisplayMetrics.densityDpi больше 0,8, но меньше 1,2 и придерживаться dp для других устройств, так какустройства с такой большой разницей между плотностью точек на дюйм и xdpi, вероятно, сообщают неверные значения для xdpi.

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

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

Вы не должны использовать мм / размер, чтобы объявить значение размера пользовательского интерфейса. Не рекомендуется .Зачем?Потому что он не будет корректно масштабироваться на разных устройствах.

Рекомендуемый способ сделать это - использовать dp / sp для измерения размера объекта / размера шрифта.

Прочитать эту статью:

Дополнительные типы ресурсов - измерение

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