Исходя из дополнительной информации, которую вы предоставили в ответе Кристиона Сетади, я говорю вам, вероятно, следует установить размер кнопки 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 отображает предупреждение при использовании в (дюймы) или мм (миллиметры) единицы измерения как размер?