如何在java代码中获取px中的维度(px格式而不是dp)?

时间:2016-06-30 09:46:10

标签: android android-layout

我怎样才能在java中阅读维度。

  

< dimen name ="某事"> 10px< / dimen>

如果我尝试

getResources().getDimensionPixelOffset(R.dimen.something)

它返回18而不是10.结果大于预期,但如果R.dimen.something是540 px,结果是180.我不理解这种转换。有没有办法从维度获得原始价值。

我需要px中的值来绘制(不可见,膨胀)视图到画布并将结果保存为jpg。结果应该总是看起来一样,不依赖于dpi。

  

<整数名称="某事"> 10< / integer>

不是一个选项,因为它不能在xml中使用。

EDIT1:

我不知道原因,但其他设备会返回预期值。也许这是我在主设备上使用的cyanogenmod版本中的一个错误

EDIT2:

这是一个错误,在更新我的cyanogenmod版本之后它可以工作

2 个答案:

答案 0 :(得分:1)

尝试其中一个

getResources().getDimensionPixelSize(R.dimen.something);

getResources().getDimension(R.dimen.something);

答案 1 :(得分:1)

如果您查看Resources#getDimensions(int)的文档,请参阅以下内容

  

float getDimension (int id)
检索特定资源ID的维度。单位转化基于与资源相关联的当前DisplayMetrics

表示您的维度定义如下所示 <dimen name="dimen_pix">10px</dimen>

getResources().getDimensions(R.dimen.dimen_pix)将返回10.0

如果尺寸指定为倾角 <dimen name="dimen_dip">10dp</dimen>

getResources().getDimensions(R.dimen.dimen_dip)
会返回10.0 x density密度,这是屏幕相对于mdpi屏幕的相对像素密度(160ppi)

如果您希望获得dip维的确切定义值,可以使用以下代码段

float screenDensity = getResources().getDisplayMetrics().density;
float dipDimension = getResources().getDimension(R.dimen.test_dimen);
float actualDimension = dipDimension/screenDensity; //required value