Я хотел бы загрузить значение как есть. У меня есть два dimension.xml
файла, один в /res/values/dimension.xml
и другой в /res/values-sw360dp/dimension.xml
.
Из исходного кода я хотел бы сделать что-то вроде
getResources().getDimension(R.dimen.tutorial_cross_marginTop);
Это работает, но полученное значение умножается на коэффициент плотности экрана (1,5 для hdpi, 2,0 для xhdpi и т. Д.).
Я тоже пытался сделать
getResources().getString(R.dimen.tutorial_cross_marginTop);
Это будет работать в принципе, но я получаю строку, которая заканчивается "dip" ...
android
android-resources
dpi
dimension
Эктор Худес Сапена
источник
источник
getDimensionPixelSize(int id)
который точно указывает, что он возвращается в пикселях, поэтомуgetDimension(int id)
должен возвращаться в dp (независимые от зависимостей единицы), который был бы готов к использованию, например, с ViewsetPadding
Ответы:
В моем измерении. XML
В коде, если я делаю
это вернет 72, которые в качестве состояния документа умножаются на плотность текущего телефона (48dp x 1,5 в моем случае)
именно так, как указано в документации:
так что если вам нужно точное значение dp, как в xml, просто разделите его на плотность DisplayMetrics
дп сейчас будет 48
источник
dp
даст масштабированное значение пикселя относительно масштаба объекта ресурса, использованного для его получения. Как только вы получите различные способы получения ресурсов, это будет более актуально. Для простоты вы можете думать об этом как о масштабе экрана. Также естьsp
или пиксели относительно размера системного текста, иpx
, или, пиксели напрямую. Каждый отличается и имеет разные цели.источник
В
Resource
классе также есть метод getDimensionPixelSize (), который, я думаю, подойдет вам.источник
getDimensionPixelSize()
случае, если вы можете ссылаться на документы, в которых оно четко указано. ВозвратыResource dimension value multiplied by the appropriate metric and truncated to integer pixels.
Для тех, кому просто нужно сохранить какое-то
int
значение в ресурсах, вы можете сделать следующее.integers.xml
Код
источник
Вы можете использовать getDimensionPixelOffset () вместо getDimension, чтобы вам не приходилось приводить к int.
источник
Вы также можете написать целое число в файле XML ..
Вы видели [это] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? использовать как .
источник
Я думаю, что это хорошо, чтобы получить значение в соответствии с разрешением, но если вы не хотите делать это, укажите это в px .......
Плотно-независимый пиксель (dp)
Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выражать размеры или положение макета независимым от плотности способом. Плотно-независимый пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана «средней» плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование модулей dp, если это необходимо.
based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.
Вы всегда должны использовать модули dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.Я думаю, что это хорошо, чтобы изменить значение в соответствии с разрешением, но если вы не хотите делать это, укажите это в px .......
обратитесь по этой ссылке
согласно этому
дп
Плотно-независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану 160 точек на дюйм (точек на дюйм), на котором 1dp примерно равен 1px.
When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down.
Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Использование dp-единиц (вместо px-единиц) - это простое решение для правильного изменения размеров вида в макете для разных плотностей экрана. Другими словами, он обеспечивает согласованность реальных размеров ваших элементов пользовательского интерфейса на разных устройствах.ПВ
Пиксели - соответствует фактическим пикселям на экране. Эта единица измерения не рекомендуется, потому что фактическое представление может варьироваться в зависимости от устройства; Каждое устройство может иметь различное количество пикселей на дюйм и может иметь больше или меньше доступных пикселей на экране.
источник
Используйте расширение Kotlin
Вы можете добавить расширение, чтобы упростить этот процесс. Это позволяет вам просто позвонить,
context.dp(R.dimen. tutorial_cross_marginTop)
чтобы получить значение FloatЕсли вы хотите обрабатывать это без контекста, вы можете использовать
Resources.getSystem()
:Например, на устройстве xhdpi используйте
24.dp
для получения 12.0 или12.px
для получения 24источник