2010-04-15 19 views
9

J'ai besoin de déterminer la densité de l'écran au moment de l'exécution dans un AppWidget Android. J'ai mis en place un périphérique d'émulation HDPI (avd). Si mettre en place un projet exécutable régulier et insérer ce code dans la méthode onCreate:Comment puis-je obtenir le DisplayMetrics correct à partir d'un AppWidget dans Android?

DisplayMetrics dm = getResources().getDisplayMetrics(); 
Log.d("MyTag", "screen density " + dm.densityDpi); 

Cette sorties « densité de l'écran 240 » comme prévu.

Cependant, si je mis en place un projet AppWidget, et insérer ce code dans la méthode onUpdate:

DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
Log.d("MyTag", "screen density " + dm.densityDpi); 

Cette sorties "densité de l'écran 160". J'ai remarqué, en connectant le débogueur, que le membre mDefaultDisplay de l'objet Resources ici est null dans le cas AppWidget. De même, si j'obtiens une ressource à l'exécution à l'aide de l'objet Resources obtenu à partir de context.getResources() dans AppWidget, il renvoie la mauvaise ressource en fonction de la densité de l'écran. Par exemple, j'ai un drawable 60x60px pour mdpi, et un drawable 80x80 pour hdpi. Si j'obtiens cet objet Drawable en utilisant context.getResources(). GetDrawable (...), il renvoie la version 60x60.

Existe-t-il un moyen de gérer correctement les ressources à l'exécution à partir du contexte d'un AppWidget?

Merci!

Répondre

1

Cela ressemble à un bug. Si vous pouvez créer un exemple de projet qui illustre l'erreur, postez un problème sur le Android issue tracker. Si vous pensez à cela, ajoutez un commentaire ici pointant vers le problème.

+0

Hmmm. J'ai créé un simple widget pour ne rien faire d'autre que démontrer ce bug, et il affiche correctement 240 dans le périphérique d'émulation HDPI. Je vais revenir en arrière et essayer de comprendre ce qui est différent de mon autre widget. Merci d'avoir regardé. – ManicBlowfish

+4

Aha. Il me manquait l'étiquette dans mon manifeste. Si je mets la version de min sdk à quelque chose> = 4 j'obtiens la densité d'écran correcte à l'exécution. – ManicBlowfish