代码之家  ›  专栏  ›  技术社区  ›  ManicBlowfish

如何从Android中的AppWidget获得正确的显示指标?

  •  9
  • ManicBlowfish  · 技术社区  · 16 年前

    我需要在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的上下文正确处理资源?

    谢谢!

    1 回复  |  直到 16 年前
        1
  •  1
  •   CommonsWare    16 年前

    这感觉像个虫子。如果可以创建演示错误的示例项目,请将问题发布到 Android issue tracker . 如果你想到了,在这里添加一个指向这个问题的评论。