从源代码中的 res/values/dimension.xml 加载维度值 [英] Load dimension value from res/values/dimension.xml from source code

查看:19
本文介绍了从源代码中的 res/values/dimension.xml 加载维度值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想按原样加载值.我有两个 dimension.xml 文件,一个在 /res/values/dimension.xml 中,另一个在 /res/values-sw360dp/dimension.xml.

I'd like to load the value as it is. I have two dimension.xml files, one in /res/values/dimension.xml and the other one in /res/values-sw360dp/dimension.xml.

从源代码我想做类似的事情

From source code I'd like to do something like

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

这可行,但我得到的值是屏幕密度系数的乘积(hdpi 为 1.5,xhdpi 为 2.0 等).

This works but the value I get is multiplied times the screen density factor (1.5 for hdpi, 2.0 for xhdpi, etc).

我也尝试过

getResources().getString(R.dimen.tutorial_cross_marginTop);

这原则上可行,但我得到一个以dip"结尾的字符串...

This would work in principle but I get a string that ends in "dip"...

推荐答案

在我的 dimens.xml 中有

In my dimens.xml I have

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

在代码中如果我这样做

int valueInPixels = (int) getResources().getDimension(R.dimen.test)

这将返回 72,作为文档状态乘以当前手机的密度(在我的情况下为 48dp x 1.5)

this will return 72 which as docs state is multiplied by density of current phone (48dp x 1.5 in my case)

正如文档所述:

检索特定资源 ID 的维度.单位换算基于与资源关联的当前 DisplayMetrics.

Retrieve a dimensional for a particular resource ID. Unit conversions are based on the current DisplayMetrics associated with the resources.

所以如果你想要精确的 dp 值,就像在 xml 中一样,只需将它与 DisplayMetrics 密度相除

so if you want exact dp value just as in xml just divide it with DisplayMetrics density

int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density);

dp 现在是 48

这篇关于从源代码中的 res/values/dimension.xml 加载维度值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆