我需要在 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 案例中为空。
同样,如果我在运行时使用从 AppWidget 中的 context.getResources() 获得的 Resources 对象获取资源,它会根据屏幕密度返回错误的资源。例如,我有一个 60x60px 的 mdpi 可绘制对象和一个 80x80 的 hdpi 可绘制对象。如果我使用 context.getResources().getDrawable(...) 获取此 Drawable 对象,它会返回 60x60 版本。
有什么方法可以在运行时从 AppWidget 的上下文中正确处理资源?
谢谢!