我需要確定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的上下文正確處理運行時的資源?
謝謝!
嗯。我創建了一個簡單的小部件,除了演示這個bug之外什麼也不做,並且它在HDPI仿真器設備中正確顯示240。我會回去嘗試弄清楚我的其他部件有什麼不同。感謝您的期待。 – ManicBlowfish 2010-04-15 16:17:15
啊哈。我錯過了清單中的標籤。如果將min sdk版本設置爲大於等於4的值,我將在運行時獲得正確的屏幕密度。 –
ManicBlowfish
2010-04-15 16:22:54