Вопрос по dimension, android, android-resources, dpi – Загрузить значение измерения из res / values / dimension.xml из исходного кода

293

Я хотел бы загрузить значение как есть. У меня два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, так как у ресурсов есть методgetDimensionPixelSize(int id) это именно то, что он возвращает в пикселе, такgetDimension(int id) должен возвращаться в dp (независимые от зависимостей единицы), который был бы готов к использованию, например с видомsetPadding Paul Verest

Ваш Ответ

7   ответов
6

Ты можешь использоватьgetDimensionPixelOffset() вместо getDimension, так что вам не пришлось приводить к int.

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

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

integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="default_value">100</integer>
</resources> 

Код

int defaultValue = getResources().getInteger(R.integer.default_value);
Error: User Rate Limit Exceeded
20

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

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededgetDimensionPixelSize()Error: User Rate Limit ExceededReturns Resource dimension value multiplied by the appropriate metric and truncated to integer pixels.
1

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

ПВ

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

705

В моем измерении. XML

<dimen name="test">48dp</dimen>

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

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

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

именно так, как утверждают документы:

Retrieve a dimensional for a particular resource ID. Unit conversions are based on the current DisplayMetrics associated with the resources.

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2

Вы можете написать целое число в файле XML также ..
have you seen [this] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? use as .

 context.getResources().getInteger(R.integer.height_pop);
17

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

Похожие вопросы