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!
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
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