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

从源代码来看,我想做一些

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

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

我也试着go 做

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

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

推荐答案

在我的钱包里.我有

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

如果我这样做了,就用代码

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

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

正如文件所说:

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

因此,如果您想要精确的DP值,就像在XML中一样,只需用DisplayMetrics密度除以它

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

DP现在就是48岁了

Android相关问答推荐

如果我将日期存储为字符串yyyy-mm--dd,如何通过对Room数据库中的日期字段进行比较来进行更复杂的查询?

LaunchedEffect何时捕获值?

如何在Android中使用TextView设置动态文本的样式

如何制作带有图标和文本的Fab

Kotlin DSL:为什么我可以从Play Store获取发布版本的日志(log)?

如何删除Jetpack Compose中的Textfield底线

我们可以使用KSP读取类中变量的值吗?

从片段导航回来

Visual Studio 2022,毛伊岛,Android Emulator:无法更改内存量

警告:应用必须面向 Android 13(API 级别 33)或更高版本.确实如此

闪屏 API 无法在 Android 12 上运行(API 31、32)

retrofit2.HttpException: HTTP 401

尽管我在onCreate()期间已经初始化,但仍出现未初始化的late init变量错误

是什么导致调用 Firebase 服务器?

只能从同一个库组内调用成功(引用groupId=androidx.work from groupId=My Composable)

系统导航栏在某些场景下应用了深色效果

无法为:app@debug/compileClasspath解析依赖项com.github.dhaval2404:imagepicker-support:1.7.1

有人可以向我解释这两个结果有什么区别吗?

使 Compose LazyColumn 的最后一项填满屏幕的其余部分

如何使在库范围之外无法访问的接口的具体实现.?