我需要在Android应用程序小部件中确定运行时的屏幕密度。我已经设置了一个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.get resources()中获得的resources对象获取资源,它将根据屏幕密度返回错误的资源。例如,我有一个用于MDPI的60x60px可绘制文件,一个用于HDPI的80x80可绘制文件。如果我使用context.getResources().getDrawable(…)获取这个可绘制对象,它将返回60x60版本。
是否有任何方法可以在运行时从AppWidget的上下文正确处理资源?
谢谢!