android - 如何从 Android 中的 AppWidget 获取正确的 DisplayMetrics?

标签 android resources android-widget android-appwidget

我需要在 Android AppWidget 中确定运行时的屏幕密度。我已经设置了一个 HDPI 模拟器设备 (avd)。如果设置一个常规的可执行项目,并将此代码插入到 onCreate 方法中:

DisplayMetrics dm = getResources().getDisplayMetrics();
Log.d("MyTag", "screen density " + dm.densityDpi);

这会按预期输出“屏幕密度 240”。

但是,如果我设置一个 AppWidget 项目,并将此代码插入到 onUpdate 方法中:

DisplayMetrics dm = context.getResources().getDisplayMetrics();
Log.d("MyTag", "screen density " + dm.densityDpi);

这会输出“屏幕密度 160”。我注意到,在连接调试器时,Resources 对象的 mDefaultDisplay 成员在 AppWidget 的情况下为 null。

同样,如果我在运行时使用从 AppWidget 中的 context.getResources() 获得的 Resources 对象获取资源,它会根据屏幕密度返回错误的资源。例如,我有一个用于 mdpi 的 60x60px 可绘制对象和一个用于 hdpi 的 80x80 可绘制对象。如果我使用 context.getResources().getDrawable(...) 获取此 Drawable 对象,它会返回 60x60 版本。

有没有什么方法可以在运行时从 AppWidget 的上下文中正确处理资源?

谢谢!

最佳答案

这感觉像是一个错误。如果您可以创建一个演示错误的示例项目,请在 Android issue tracker 上发布问题.如果您想到它,请在此处添加指向该问题的评论。

关于android - 如何从 Android 中的 AppWidget 获取正确的 DisplayMetrics?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643198/

相关文章:

android - "adjustResize"安卓

Android Studio 签名 APK ':app:transformClassesAndResourcesWithProguardForRelease'

asp.net-mvc-3 - ASP.NET MVC3 : Private resources

Android 在方向更改后从 AsycTask 更新 UI

android - Android-默认情况下,在YouTube应用中打开链接

Android:通过相机拍摄照片后无法调用 onActivityResult() 方法

Laravel 路线 : 路线::资源

java - Java 中 close() 的 Python 等价物是什么?

java - 如何让 ToggleButton 识别 Android Activity 中的多次点击?

Android 布局、表格、相对布局和线性布局,我对它们的差异感到困惑