Intereting Posts
Пользовательский URL для Android, чтобы открыть приложение, как в iOS Android TabLayout больше не отображает содержимое, как только фрагмент переключается Приложение неверно настроено для входа в Facebook: проблема интеграции Android Facebook Android JUnit не компилируется, если объекты являются составными Служба специальных возможностей отключена при каждом запуске отладки Шаблон проектирования для поиска необработанных исключений в AsyncTask Где я могу получить JAR для импорта libcore.io? Случайное исключение NullPointerException в SoundManager Не удалось синхронизировать Gradle: Причина: org / gradle / listenener / ActionBroadcast Поддержка Markdown в Android TextView Как вы передаете изображения (растровые изображения) между действиями андроида с помощью пакетов? Правильное обнаружение прокрутки в GridView, размещенном внутри ViewPager в Android Лучший способ обновить виджет Android каждые 20-30 секунд: обработчик, служба или будильник? Функция выполнения Android после нажатия «Enter» для EditText Как подавить уведомление о блокировке экрана в Android 5 (Lollipop), но разрешить его в области уведомлений?

Загрузка значения измерения из 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» …

Solutions Collecting From Web of "Загрузка значения измерения из res / values ​​/ dimension.xml из исходного кода"

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

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

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

 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); 

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

ПВ

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

Вы можете использовать один из ваших методов, например, ваш второй и добавить эти строки к результатам:

 int stringLength = getResources().getString(R.dimen.tutorial_cross_marginTop).length(); string stringDimensions = getResources().getString(R.dimen.tutorial_cross_marginTop); int dimension = Integer.parseInt(stringDimensions.substring(stringLength-3, stringLength-1)); 

Надеюсь, это поможет 🙂