Загрузить значение измерения из res / values ​​/ dimension.xml из исходного кода

Я хотел бы загрузить значение как есть. У меня есть два файла /res/values/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» …

В моем dimens.xml у меня есть

 48dp 

В коде Если я делаю

 int valueInPixels = (int) getResources().getDimension(R.dimen.test) 

это вернет 72, который, поскольку состояние docs умножается на плотность текущего телефона (48dp x 1,5 в моем случае)

как указано в документах:

Извлеките размер для определенного идентификатора ресурса. Преобразования блоков основаны на текущих DisplayMetrics, связанных с ресурсами.

поэтому, если вы хотите, чтобы точное значение dp так же, как и в xml, просто разделите его на плотность DisplayMetrics

 int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density) 

dp будет 48 сейчас

Класс Resource также имеет метод getDimensionPixelSize (), который, я думаю, будет соответствовать вашим потребностям.

 Context.getResources().getDimension(int id); 

Для тех, кому просто нужно сохранить некоторую ценность int в ресурсах, вы можете сделать следующее.

integers.xml

   100  

Код

 int defaultValue = getResources().getInteger(R.integer.default_value); 

Вы можете использовать getDimensionPixelOffset () вместо getDimension, поэтому вам не нужно было указывать int.

 int valueInPixels = getResources().getDimensionPixelOffset(R.dimen.test) 

Вы также можете написать целое число в файле xml.
вы видели [это] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? использовать как .

  context.getResources().getInteger(R.integer.height_pop); 
  This works but the value I get is multiplied times the screen density factor (1.5 for hdpi, 2.0 for xhdpi, etc). 

Я думаю, что это хорошо, чтобы получить значение в соответствии с разрешением, но если вы не хотите этого делать, дайте это в 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. 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-to-pixel будет меняться с плотностью экрана, но не обязательно в прямой пропорции. Использование блоков dp ​​(вместо единиц пикселей) – это простое решение для правильного изменения размеров представления в вашем макете для разных плотностей экрана. Другими словами, он обеспечивает согласованность размеров вашего пользовательского интерфейса в реальном масштабе времени на разных устройствах.

ПВ

Пиксели – соответствует фактическим пикселям на экране. Эта единица измерения не рекомендуется, поскольку фактическое представление может варьироваться в зависимости от устройства; каждое устройство может иметь различное количество пикселей на дюйм и может иметь больше или меньше общих пикселей, доступных на экране.

  • Различные размеры шрифтов строк в том же TextView
  • В C, почему sizeof (char) 1, когда 'a' является int?
  • Java / ImageIO получает размеры изображения без чтения всего файла?
  • Сколько данных может содержать список максимум?
  • Является ли sizeof (некоторый указатель) всегда равным четырем?
  • Разница между опциями передачи в aes () и за ее пределами в ggplot2
  • Почему имена таблиц / столбцов / индексов Oracle ограничены 30 символами?
  • Получение размера терминала в c для окон?
  • Размер массива (длина) в C #
  • Определите размер слова моего процессора
  • Array vs Array - Инициализация массива с переменным vs действительным числом
  • Давайте будем гением компьютера.