2010-04-15 32 views
9

Tôi cần xác định mật độ màn hình khi chạy trong Android AppWidget. Tôi đã thiết lập một thiết bị giả lập HDPI (avd). Nếu thiết lập dự án thực thi thông thường và chèn mã này vào phương thức onCreate:Tôi làm cách nào để có được DisplayMetrics chính xác từ một AppWidget trong Android?

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

Kết quả này "mật độ màn hình 240" như mong đợi.

Tuy nhiên, nếu tôi thiết lập một dự án AppWidget, và chèn mã này vào phương pháp onUpdate:

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

này kết quả đầu ra "mật độ màn hình 160". Tôi nhận thấy, hooking lên trình gỡ rối, rằng thành viên mDefaultDisplay của đối tượng Tài nguyên ở đây là null trong trường hợp AppWidget.

Tương tự, nếu tôi nhận tài nguyên khi chạy bằng cách sử dụng đối tượng Tài nguyên thu được từ context.getResources() trong AppWidget, nó trả về tài nguyên sai dựa trên mật độ màn hình. Ví dụ, tôi có một 60x60px drawable cho mdpi, và một 80x80 drawable cho hdpi. Nếu tôi lấy đối tượng Drawable này bằng cách sử dụng context.getResources(). GetDrawable (...), nó trả về phiên bản 60x60.

Có cách nào để xử lý đúng tài nguyên trong thời gian chạy từ ngữ cảnh của AppWidget không?

Cảm ơn!

Trả lời

1

Điều này giống như một lỗi. Nếu bạn có thể tạo một dự án mẫu thể hiện lỗi, hãy đăng sự cố trên Android issue tracker. Nếu bạn nghĩ về nó, thêm một bình luận ở đây chỉ ra vấn đề.

+0

Hmmm. Tôi tạo ra một widget đơn giản để làm gì, nhưng chứng minh lỗi này, và nó hiển thị chính xác 240 trong thiết bị giả lập HDPI. Tôi sẽ quay lại và cố gắng tìm ra những điểm khác biệt về tiện ích khác của tôi. Cảm ơn bạn đã tìm kiếm. – ManicBlowfish

+4

Aha. Tôi đã thiếu thẻ trong tệp kê khai của mình. Nếu tôi thiết lập phiên bản sdk min đến bất cứ điều gì> = 4 tôi nhận được mật độ màn hình chính xác khi chạy. – ManicBlowfish

Các vấn đề liên quan