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

时间:2010-04-15 06:36:38

标签: 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对象获取资源,则它会根据屏幕密度返回错误的资源。例如,我有一个60x60px可绘制的mdpi,以及一个80x80可绘制的hdpi。如果我使用context.getResources()。getDrawable(...)得到这个Drawable对象,它将返回60x60版本。

有没有办法在运行时从AppWidget的上下文正确处理资源?

谢谢!

1 个答案:

答案 0 :(得分:1)

这感觉就像一个bug。如果您可以创建演示错误的示例项目,请在Android issue tracker上发布问题。如果您这么想,请在此处添加注释以指出问题。