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