2010-04-15 33 views
9

我需要確定Android AppWidget在運行時的屏幕密度。我建立了一個HDPI仿真器設備(avd)。如果設置了一個普通可執行項目,並插入該代碼到onCreate方法:如何從Android的AppWidget中獲取正確的DisplayMetrics?

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

這感覺就像一個錯誤。如果您可以創建演示錯誤的示例項目,請在Android issue tracker上發佈問題。如果你想到它,請在此處添加註釋,指出問題。

+0

嗯。我創建了一個簡單的小部件,除了演示這個bug之外什麼也不做,並且它在HDPI仿真器設備中正確顯示240。我會回去嘗試弄清楚我的其他部件有什麼不同。感謝您的期待。 – ManicBlowfish 2010-04-15 16:17:15

+4

啊哈。我錯過了清單中的標籤。如果將min sdk版本設置爲大於等於4的值,我將在運行時獲得正確的屏幕密度。 – ManicBlowfish 2010-04-15 16:22:54

相關問題