从源代码的res / values / dimension.xml加载维度值

我想加载它的值。 我有两个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); 

这将原则上工作,但我得到一个string,结束在“浸”…

在我的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

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)

定义UI布局时应使用的虚拟像素单位,以密度无关的方式表示布局尺寸或位置。 与密度无关的像素相当于160dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假设的基准密度。 在运行时,系统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单位的任何缩放比例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. 定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示您的UI。

我认为根据分辨率更改值是很好的,但如果您不想这样做,请在px …..

参考这个链接

按照这个

DP

与密度无关的像素 – 基于屏幕物理密度的抽象单位。 这些单位是相对于160dpi(每英寸点数)的屏幕,其中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单位)是一个简单的解决scheme,使您的布局中的视图尺寸正确resize不同的屏幕密度。 换句话说,它为不同设备上的UI元素的实际尺寸提供一致性。

PX

像素 – 对应于屏幕上的实际像素。 不build议使用这个单位,因为实际的表示可以在不同的设备上有所不同。 每个设备可以具有不同数量的每英寸像素,并且可以具有更多或更less的屏幕上可用的总像素。

对于那些只需要在资源中保存一些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); 

你可以使用你的方法之一,例如你的第二个方法,并将这些行添加到结果中:

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

我希望帮助:)