2013-02-26 35 views
39

Nexus 7: 7" 1280x800Làm thế nào để bao gồm 10" và 7" bố trí đúng

Galaxy tab 10.1 10" 1280x800

Tôi muốn ứng dụng của tôi để chạy trên 7 và 10 viên inch. Theo như tôi biết, tôi phải bao gồm các thư mục này bố trí trong ứng dụng của tôi:

cho 7 viên inch

  • bố trí sw600dp
  • bố trí sw600dp cổng

10 máy tính bảng inch

  • bố cục-sw720dp
  • layou t-sw720dp-port

Chạy tốt trên nexus 7, nhưng tải bố cục sw600dp trên máy tính bảng 10 ".

Nếu tôi bao gồm các thư mục mặc định:.

  • bố trí
  • bố trí cổng

10" galaxy tab tải bố trí từ những

Nếu tôi chỉ bao gồm cách bố trí mặc định các thư mục và thư mục sw600dp, nó treo trên nexus7.

H Tôi có phải hỗ trợ điện thoại, máy tính bảng 7 "và máy tính bảng 10" hay không, nếu tab "thiên hà 10" không tải bố cục sw720p?

chỉnh sửa: định dạng

+3

là cấp api của bạn> 13 (phiên bản> 3.2)? –

+0

tab thiên hà là cấp api 15 (4.0.4). Mức api tối thiểu của tôi phải là 8 ... – berestom

Trả lời

58

Vấn đề là, tôi không có thư mục bố cục mặc định.

Tôi đã thử sử dụng, chỉ sử dụng thư mục sw600dp và sw720dp. Tôi vẫn không biết tại sao họ không làm việc, nhưng tôi không quan tâm. Tôi không thể sử dụng swxxxdp < 3.2 anyway, do đó, vít đó.

Vì vậy, nếu bạn muốn viết một ứng dụng, mà đã hỗ trợ điện thoại (2.2+), máy tính bảng 7inch và 10 viên nén inch, sử dụng các công cụ oldschool sau:

bố trí này là mặc định, nó là cần thiết ngay cả khi bạn không có kế hoạch hỗ trợ điện thoại!

bố trí lớn cho 7" tablet (hoạt động trên giả lập và Vỏ đựng Nexus 7)

layout-xlarge 10" tablet (hoạt động trên giả lập và galaxytab10.1)

Other people đã đến cùng một kết luận.

+1

Tôi đồng ý, tôi đã gặp phải sự cố tương tự, đã giải quyết thêm thư mục layout-xlarge và drawable-xlarge . –

+0

Tôi đồng ý với bạn. sw600dp không phải là cách thực hiện tiêu chuẩn nữa. tôi đã không thử giải pháp của bạn thực sự nhưng tôi đoán đó là cách duy nhất ra ngoài. tìm kiếm bất kỳ cách nào tốt hơn. tôi tìm thấy một người sẽ chia sẻ. –

+0

chính xác, sw600dp không hoạt động đối với tôi.Vì vậy, tôi đã sử dụng layout-large và layout-xlarge. – TharakaNirmana

20

Tôi cũng đang gặp phải vấn đề như vậy trong đơn đăng ký của mình. Nhưng tôi tìm thấy một giải pháp tốt cho việc này. Tôi chỉ có một bố cục cho tablet và tên thư mục là layout-sw600dp. Bây giờ, khi có vấn đề về chiều cao và chiều rộng, tôi đã tạo một số thư mục values khác nhau, trong đó tôi đặt dimensionsfont size và các thư khác. Vì vậy, sẽ không có giá trị constant trong layout của màn hình máy tính bảng.

androd:layout_width:"60dp" // i drop this scenario 

androd:layout_width:"@dimen/tab_width" // i used this scenario 

và tên values thư mục của bạn sẽ như thế nào

values-xlarge 
values-large 

Tất cả các giá trị này sẽ được lấy từ thư mục giá trị của bạn. Nó sẽ không tạo bố cục khác nhau, nhưng một bố cục có thể được sử dụng nhiều lần.

Dưới đây là các từ của trang web Developer.android. Cấu hình ví dụ

Để giúp bạn nhắm mục tiêu một số thiết kế của bạn với nhiều loại thiết bị khác nhau, sau đây là một vài con số cho độ rộng màn hình tiêu biểu:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc). 
480dp: a tweener tablet like the Streak (480x800 mdpi). 
600dp: a 7” tablet (600x1024 mdpi). 
720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc). 

Sử dụng vòng loại kích thước từ bảng 2, ứng dụng của bạn có thể chuyển đổi giữa tài nguyên bố cục khác nhau của bạn cho thiết bị cầm tay và máy tính bảng sử dụng bất kỳ số nào bạn muốn cho chiều rộng và/hoặc chiều cao. Ví dụ, nếu 600dp là chiều rộng nhỏ nhất có sẵn hỗ trợ bởi bố trí máy tính bảng, bạn có thể cung cấp hai bộ bố trí:

res/layout/main_activity.xml # Đối với điện thoại di động
res/layout-sw600dp/main_activity.xml # cho máy tính bảng

===

trong này, bạn có thể thấy rằng, bố trí cho 1280 * 720 là dưới layout-sw720dp nên thay vì tạo layout-normal-xlarge bạn nên sử dụng điều này cho phép bạn để quyết định sự khác biệt. Thay vì xác định khác nhau bằng cách sử dụng layout-large-mdpilayout-large-ldpi, bạn không chỉ xác định được là smallest width? Bởi vì, android cung cấp thư mục drawables cho các hình ảnh khác nhau, điều duy nhất là độ phân giải của nó. Và bạn có giải pháp trên.

Sửa

Sau đó, bạn phải có để phát triển bố trí khác nhau. Không có lựa chọn nào khác. Tôi tìm thấy tại http://jamil.fluidsoul.net/2011/03/06/creating-android-applications-for-multiple-screen-sizes.

Low density Small screens QVGA 240x320 (120dpi): 

layout-small-ldpi (240x320) 
layout-small-land-ldpi (320x240) 

Low density Normal screens WVGA400 240x400 (x432) (120dpi): 

layout-ldpi (240 x 400) 
layout-land-ldpi (400 x 240) 

Medium density Normal screens HVGA 320x480 (160dpi): 

layout-mdpi (320 x 480) 
layout-land-mdpi (480 x 320) 

Medium density Large screens HVGA 320x480 (160dpi): 

layout-large-mdpi (320 x 480) 
layout-large-land-mdpi (480 x 320) 

Galaxy Tab (240 dpi): 

layout-large (600 x 1024) 
layout-large-land (1024 x 600) 

High density Normal screens WVGA800 480x800 (x854) (240 dpi): 

layout-hdpi (480 x 800) 
layout-land-hdpi (800 x 480) 

Xoom (medium density large but 1280x800 res) (160 dpi): 

layout-xlarge (800 x 1280) 
layout-xlarge-land (1280 x 800) 
+0

vấn đề của tôi là bố cục 7 "và 10" của tôi hoàn toàn khác. – berestom

+0

xem câu trả lời đã chỉnh sửa của tôi. –

1

Điều này rất lạ, vì bạn đang làm đúng.

Vòng loại sw600dp phải được chọn bởi Nexus 7.
Nếu có, bộ định danh sw720dp phải được chọn bởi Tab Galaxy.

Bạn có chắc là nó gặp sự cố khi cố gắng tìm bố cục phù hợp không? Android có thể tìm thấy bố cục chính xác nhưng một số thứ trong tệp xml bố cục có thể bị thiếu và sự cố là do sự cố đó gây ra.

+0

Nó treo tại setContentView. Dưới đây là một ví dụ khác: ainol Venus 7 "1280x800 160dpi sẽ không tải bố cục sw600dp. – berestom

+0

Tôi đã thử nghiệm nó lặp đi lặp lại. Bố cục mặc định của tôi sẽ là 10", chúng nằm trong thư mục sw720dp và tab thiên hà tải những người sw600dp – berestom

+0

@berestom: chỉ để biết thông tin: ainol venus có sw480dp, loại 'bình thường' của màn hình (không lớn không quá lớn). –

2

Có, bạn nên sử dụng thư mục phụ thuộc vào bố cục nhưng cũng đảm bảo mọi bố cục độc lập của thiết bị đều nằm trong thư mục res/layout của bạn.

Điều này được đề cập trên trang web dành cho nhà phát triển Android nhưng để nhắc lại điểm của họ, nếu bạn có bố cục chỉ khả dụng trong thư mục bố cục-xlarge trên ứng dụng hỗ trợ thiết bị có kích thước lớn và bình thường, ứng dụng sẽ sự cố là thiết bị nhỏ hơn sẽ không thể tìm thấy bất kỳ kết quả phù hợp nào cho tài nguyên này.

Đây là một cấu trúc thư mục tốt, bắt đầu với:

res/layout 

Giữ một bố trí thiết bị độc lập trong đó, bạn có thể tránh điều này nếu bạn đang chiếm tất cả các loại vòng loại càng tốt nhưng điều này vẫn là lựa chọn an toàn hơn .

Nếu bạn muốn thêm bố cục cụ thể cho tiếng nói 7 và 10 viên inch, sử dụng tất cả các nội dung sau:

res/layout-large 
res/layout-xlarge 
res/layout-sw600dp 
res/layout-sw720dp 
res/layout-sw800dp 

Và như vậy đối với bất kỳ độ rộng màn hình thiết bị cụ thể mà bạn muốn hỗ trợ. Cần lưu ý rằng sw600 hỗ trợ chiều rộng nhỏ nhất có thể, do đó tránh sử dụng chiều rộng màn hình khi thiết bị được giữ ở chế độ ngang. Sử dụng các trình phân giải swxxxdp được ưu tiên nhưng chúng được thêm vào API 13, do đó bạn sẽ vẫn cần lớn, xlarge cho hệ điều hành Android cũ hơn.

Về việc sử dụng dpi, hãy lưu ý rằng nếu bạn CHỈ đặt một trình độ mật độ cho kích thước, ví dụ như layout-large-mdpi thì bất kỳ thiết bị nào phù hợp với vòng loại lớn sẽ sử dụng bố cục từ đây thay vì thư mục khác. tiêu chí Đối sánh tốt nhất, mà bạn có thể đọc về here. Nó sẽ phù hợp với nó như là một thiết bị lớn trước khi nó sẽ phù hợp với mật độ để màn hình mật độ không mdpi vẫn sẽ sử dụng các bố cục này.

Để chống lại điều này, bạn sẽ phải bao gồm các thư mục cho bất kỳ mật độ nào khác mà bạn hỗ trợ, do đó, hãy nhập layout-large-hdpi theo ví dụ trên và bao gồm trong các phiên bản HDpi của thư mục này mà bạn đã sử dụng trong thư mục mdpi bạn yêu cầu họ phải khác.

Tránh sao chép bố cục của bạn, không sao chép bố cục không phụ thuộc vào thiết bị vào mọi thư mục không sử dụng nếu bạn chỉ cần chúng trong res/layout, và chỉ giữ các bố cục cần những vòng loại này trong các thư mục và sắp xếp chúng đúng cách , đảm bảo các thư mục của bạn được đặt tên với các vòng loại theo thứ tự ưu tiên để ngăn không cho sử dụng thư mục sai cho kết hợp mật độ/kích thước.

+0

không hoạt động. Đã đi vào và ra và tìm kiếm tất cả xung quanh. những người khác cũng có cùng một vấn đề. sw600dp không hoạt động. cho oneplus của tôi, nó kéo bố cục thư mục sw600dp. –