Intereting Posts
Должен ли я попасть в Android Studio или я должен придерживаться Eclipse? Как увеличить размер transport.dump от 256 байт до 512 или более байтов в KSOAP2? Клавиатура Отображена позиция перепутанных элементов Получить расширенный групповой вид ExpandableListView с помощью onGroupExpand Как развернуть подписанный APK при нажатии кнопки «Выполнить» в Android Studio? Компиляция и тестирование ядра Android с помощью Android Emulator Ошибка: Gradle: выполнение не выполнено для задачи ': app: crashlyticsCleanupResourcesDebug'. > Ошибка инструмента разработчика Crashlytics Ошибка: только исходный поток, создавший иерархию представлений, может коснуться его представлений Веб-просмотр Android: Внесите локальный файл Javascript на удаленную веб-страницу Вспышка захвата камеры Android2 слишком медленная Android: orientation = "vertical" не работает для TabWidget Воспроизведение фрагмента backstack без воспроизведения Pop-Animation Почему я всегда получаю ACTION_DOWN от onTouchEvent Как использовать карту google V2 внутри фрагмента? ОШИБКА: должен реализовать OnFragmentInteractionListener

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

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