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