从源代码中加载res/values/dimension.xml中的尺寸值

424

我想要以原封不动的方式加载这个值。 我有两个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"结尾...


1
我想知道这是否是Android中的一个bug,因为Resources类有一个方法getDimensionPixelSize(int id)明确说明它返回像素值,因此getDimension(int id)应该返回独立于依赖关系的单位(dp),以便可以直接使用,例如在View的setPadding方法中。 - Paul Verest
@PaulVerest 我也对API中的冗余感到困惑,但既然现在是2022年,而且API文档说明所有方法都返回“像素”,我想这应该是预期行为。 - mdelolmo
11个回答

0
Kotlin:
// Activity
val pixels: Float = resources.getDimension(R.dimen.your_dimen_id)

// Fragment
val pixels: Float = (activity as? MainActivity)?.resources?.getDimension(R.dimen.your_dimen_id) ?: return

之后,如果您需要将像素转换为DP
fun convertPixelsToDp(px: Float, context: Context): Float {
    return px / (context.resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接