4

Я указываю ширину кнопки как 600dp в values/dimens.xml, но когда я развертываю и запускаю ее на своем Nexus 5, она занимает всю доступную ширину в альбомной ориентации.Почему вид с шириной 600dp занимает всю ширину ландшафта Nexus 5?

Моя активность работает только в ландшафтном режиме, как я указал в файле манифеста. Макеты находятся в каталоге layouts. Изображения находятся в каталоге «drawable-xxhdpi», и они выглядят отлично, но все, что я указываю в dp, увеличивается.

Предварительный просмотр в Android Studio и фактическое устройство, похоже, ведут себя так, как они имеют максимальную ширину 600dp, когда это должно быть 1920. Почему это и как я могу это исправить?

+1

http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android – nhaarman

ответ

6

Физическая ширина дисплея на ландшафте Nexus 5 составляет 1920 пикселей, однако 600dp! = 600 пикселей. Nexus 5 имеет плотность дисплея ~ 445 точек на дюйм. Dp - это пиксели только при средней плотности (160 ppi). Таким образом, все, что указано в dp, будет масштабироваться примерно в 445/160 = 2,78125. Так что 600dp на самом деле около 1669 пикселей. Это должно объяснить большую часть того, что вы видите.

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

+0

А, справа. Поэтому я должен разделить все измерения на этот коэффициент до установки в dimens.xml, учитывая, что у меня есть дизайн в 1920x1080? Hmmm ... так почему же нужно иметь разные файлы dimens.xml в каталогах значений-swXXXXdp, когда 'dp' уже делает эту магию, интересно? – user4092233

+0

@ user4092233 Подробнее см. Http://developer.android.com/training/multiscreen/index.html. –

+0

@ user4092233 - Я редко использую разные файлы dimens.xml для разных конфигураций, хотя у них есть их использование. Например, вам могут потребоваться разные размеры для разных размеров экрана. Например, на большом экране вам может понадобиться полдюймовый маркер вокруг представления. Поэтому, независимо от плотности пикселей, вы можете указать запас 80dp (который будет составлять 80 пикселей на устройстве mdpi, но больше похоже на 223 пикселя на Nexus 5). На меньшем экране вам может понадобиться только 1/8-дюймовый маркер, который будет 20dp. Для независимых по размеру измерений используйте '/ res/values-nodpi/dimens.xml' и px, а не dp. –