我想按原样加载值。我有两个dimension.xml
文件,一个在/res/values/dimension.xml
,另一个在/res/values-sw360dp/dimension.xml
。
从源代码我想做的事情
getResources().getDimension(R.dimen.tutorial_cross_marginTop);
这是有效的,但我获得的值乘以屏幕密度系数(hdpi为1.5,xhdpi为2.0等)。
我也试过
getResources().getString(R.dimen.tutorial_cross_marginTop);
这原则上可行,但我得到一个以“dip”结尾的字符串......
在我的dimens.xml中,我有
<dimen name="test">48dp</dimen>
在代码中如果我这样做
int valueInPixels = (int) getResources().getDimension(R.dimen.test)
这将返回72,当文档状态乘以当前手机的密度(在我的情况下为48dp x 1.5)
正如文档所述:
检索特定资源ID的维度。单位转换基于与资源关联的当前DisplayMetrics。
因此,如果您想要精确的dp值,就像在xml中一样,只需将其除以DisplayMetrics密度即可
int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density)
dp现在是48
Context.getResources().getDimension(int id);
Resource
类还有一个方法getDimensionPixelSize(),我认为这将符合您的需求。
对于那些只需要在资源中保存一些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);
您可以使用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)
在定义UI布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置。与密度无关的像素相当于160 dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基线密度。在运行时,系统透明地处理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.
在定义应用程序的UI时应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI。
我认为根据分辨率更改值是好的,但如果你不想这样做,请在px中给出这个.......
参考这个link
按此
DP
密度无关像素 - 基于屏幕物理密度的抽象单位。这些单位相对于160 dpi(每英寸点数)的屏幕,其中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单位(而不是px单位)是一种简单的解决方案,可以使布局中的视图尺寸适当调整以适应不同的屏幕密度。换句话说,它为不同设备的UI元素的实际大小提供了一致性。
PX
像素 - 对应于屏幕上的实际像素。建议不要使用此计量单位,因为实际表示可能因设备而异;每个设备可以具有每英寸不同数量的像素,并且可以在屏幕上具有更多或更少的总像素。