2012-12-12 35 views
13

Tôi đã viết một widget được cho là khối 4x2 màn hình chính. Đó là minheight và MinWidth, với phù hợp với dòng trang "App Widget Hướng dẫn thiết kế" làWidget kích thước lưới sai

android:minWidth="250dp" 
android:minHeight="110dp" 

Và một đệm được áp dụng từ dimens.xml nếu phiên bản hệ điều dưới Ice Cream Sandwich

Trên Nexus của tôi 4 (xhdpi, Jellybean 4.2.1), tiện ích này là 4x2. Trên trình mô phỏng (hdpi, Gingerbread 2.3.3), tiện ích này là 4x2. Tuy nhiên, trên Nexus 7 của tôi (hdpi, Jellybean 4.2.1), tiện ích con là 3x2. Tôi không thể cho cuộc sống của tôi tìm ra lý do tại sao hoặc làm thế nào để sửa chữa nó. Có suy nghĩ gì không?

Trả lời

10

Lars Vogel viết trong this Home Screen Widget tutorial rằng:

Theo nguyên tắc tính toán bạn cần xác định kích thước của widget với công thức: ((Số cột/hàng) * 74) - 2. Đây là những thiết bị các pixel độc lập và -2 được sử dụng để tránh các vấn đề làm tròn.

Chỉnh sửa: dường như Vogel đã nhận nó từ old Widget API documentation (cuộn xuống giữa trang để xem tham khảo).

Dựa trên phép đo này, đối với một tế bào 4 chiều rộng và chiều cao 2 tế bào, sử dụng 294 x 146 nhúng:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="294dip" android:minHeight="146dip" 
    android:updatePeriodMillis="0" android:initialLayout="@layout/some_layout" /> 
+0

Như bạn nói, 294x146 sẽ được dựa trên các tài liệu lỗi thời. Theo tài liệu mới, tôi đã sử dụng các phép đo chính xác cho tiện ích 4x2 dựa trên tài liệu mới và tiện ích con đăng ký dưới dạng 4x2 trên tất cả các thiết bị ngoại trừ Nexus 7 của tôi, nơi nó đăng ký là 3x2 – Nick

+0

Điều gì xảy ra trên Nexus 7 nếu bạn sử dụng các phép đo cũ? –

+0

Vâng, tôi biết rằng nó sẽ hoạt động, bởi vì tôi đã sử dụng các phép đo cũ trên một phiên bản trước của các vật dụng này. Tuy nhiên, với các phép đo cũ, một tiện ích chuyển đổi 1x1 chẳng hạn, được đo bằng 2x2 trên Nexus của tôi 4. Các phép đo mới được cho là dành cho Ice Cream Sandwich và nơi hệ điều hành áp dụng đệm riêng của nó. Nexus 7 đang chạy phiên bản 4.2 và do đó nên sử dụng các phép đo mới. Tôi có một padding tự động áp dụng cho các widget nếu hệ điều hành được phát hiện là 3.x hoặc thấp hơn – Nick

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