Làm cách nào để chỉ định bố cục khác nhau cho hướng dọc và ngang?


142

Tôi đã thấy các tài liệu tham khảo để có thể chỉ định hai tệp xml bố cục riêng cho một hoạt động, một cho Chân dung và một cho Cảnh. Tôi đã không tìm thấy bất kỳ thông tin về cách làm điều đó mặc dù. Làm cách nào để chỉ định cho từng hoạt động tệp xml là bố cục dọc và bố cục ngang là gì?

Cũng có thể chỉ định bố cục khác nhau cho các kích thước màn hình khác nhau? nếu vậy, làm thế nào hoàn thành cái này?

Câu trả lời:


203

Tạo một layout-landthư mục và đặt phiên bản ngang của tệp XML bố trí của bạn trong thư mục đó.


3
Điều đó có nghĩa là tất cả các hoạt động cần xác định cả chế độ xem phong cảnh và chân dung nếu tôi làm điều này?
Jay Askren

20
Không, nếu không có định nghĩa đất bố cục tồn tại, nó chỉ sử dụng bố cục XML trong thư mục bố cục tiêu chuẩn.
Đánh dấu B

trong trường hợp của tôi, layout-land không hoạt động khi tôi đang sử dụng, android: configChanges = "direction | keyboardHidden | screenSize"
Tushar Pandey

9
Xóa hướng khỏi android: configChanges = "direction | keyboardHidden | screenSize"
Ushal Naidoo

60

Bạn chỉ cần đặt nó trong các thư mục riêng biệt với các tên khác nhau tùy theo hướng và độ phân giải, thiết bị sẽ tự động chọn đúng cho cài đặt màn hình của nó

Thêm thông tin ở đây:

http://developer.android.com/guide/practices/sc Greens_support.html

trong "Vòng loại thư mục tài nguyên cho kích thước và mật độ màn hình"


Chỉ hoạt động cho các phiên bản HĐH 1.6 trở lên. Nếu bạn muốn hỗ trợ 1.5, bạn cần liên kết này: developer.android.com/guide/practices/screen-support-1.5.html
Scott Biggie

2
@Silvio Donnini - liên kết không còn có thông tin cần thiết.
itaboutcode

2
@itsaboutcode Đúng vậy: Chuyển xuống "Sử dụng vòng loại cấu hình"
Danation

26

Dành cho những người yêu thích chuột! Tôi nói nhấp chuột phải vào thư mục tài nguyên và Add new resource file, từ vòng loại có sẵn, chọn orientation:

nhập mô tả hình ảnh ở đây


Nhưng bạn vẫn có thể làm điều đó bằng tay bằng cách nói, thêm thư mục con "layout-land" vào

"Your-Project-Directory \ app \ src \ main \ res"

kể từ đó bất kỳ tập tin Layout.xml dưới này thư mục con sẽ chỉ làm việc cho chế độ phong cảnh tự động .

Sử dụng "layout-port" cho chế độ dọc.


1
Điều này làm việc cho tôi. Tôi đã thêm một tệp bố cục mới theo hướng dẫn có cùng tên với phiên bản dọc. Android Studio tự động tạo một thư mục cho bố cục đó. Một bố cục cho chân dung và một bố cục cho phong cảnh. Bố cục mới sẽ tự động được hiển thị khi xoay màn hình.
Smitty-Werben-Jager-Manjenson

23

Chỉ là một lời nhắc nhở:

Xóa orientationkhỏi android:configChangesthuộc tính cho hoạt động trong tệp kê khai của bạn xmlnếu bạn đã xác định nó:

android:configChanges="orientation|screenLayout|screenSize"

1
Điều gì xảy ra nếu tôi cần có android: configChanges = "direction | screenLayout | screenSize" trong bảng kê khai của tôi, vì một số phân đoạn của tôi có thể theo cả hai hướng và một số thì không, nhưng vẫn cần bố cục riêng cho phong cảnh và chân dung cho những mảnh đó Có thể thay đổi định hướng năng động?
natansalda

9

Cách nhanh nhất cho Android Studio 3.xx và Android Studio 4.xx

1. Đi đến tab thiết kế của bố trí hoạt động

2. Ở đầu bạn nên nhấn vào nút định hướng để xem trước, có một tùy chọn để tạo bố cục ngang (kiểm tra hình ảnh), một thư mục mới sẽ được tạo dưới dạng tệp bố cục xml của bạn cho hướng cụ thể đó

nhập mô tả hình ảnh ở đây


4

Tôi nghĩ cách dễ nhất trong các phiên bản Android mới nhất là chuyển sang chế độ Thiết kế của XML (không phải Văn bản).

Sau đó từ menu, chọn tùy chọn - Tạo Biến đổi cảnh quan. Điều này sẽ tạo ra một xml cảnh mà không gặp rắc rối trong vài giây. Phiên bản Android Studio mới nhất cho phép bạn tạo chế độ xem ngang ngay lập tức.

nhập mô tả hình ảnh ở đây

Tôi mong công việc này phù hợp với bạn.


3

Tạo một thư mục mới layout-land, sau đó tạo xmltệp có cùng tên layout-landvới layoutthư mục đó và căn chỉnh nội dung của bạn cho chế độ Phong cảnh.

Lưu ý rằng id của nội dung trong cả hai xmllà như nhau.


3

Dòng cuối cùng bên dưới là một ví dụ để áp dụng hai bộ định lượng: màn hình ngang và chiều rộng nhỏ nhất (600dp). Cập nhật 600dp với những cái bạn cần.

res/layout/main_activity.xml                # For handsets
res/layout-land/main_activity.xml           # For handsets in landscape
res/layout-sw600dp/main_activity.xml        # For 7” tablets
res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape

Những điều trên cũng áp dụng cho dimens

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets
res/values-sw600dp-land/dimens.xml   # For 7” tablets in landscape

Một số liệu thiết bị hữu ích: https : // m Material.io/tools/devices/


2

Hoặc sử dụng cái này:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:scrollbars="vertical" 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent">

  <LinearLayout android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

     <!-- Add your UI elements inside the inner most linear layout -->

  </LinearLayout>
</ScrollView>

0
  1. Nhấp chuột phải vào thư mục res,
  2. Mới -> Tệp tài nguyên Android
  3. trong vòng loại có sẵn, chọn Định hướng,
  4. thêm vào vòng loại Chosen
  5. trong Hướng màn hình, chọn Cảnh
  6. nhấn OK

Sử dụng Android Studio 3.4.1, nó không còn tạo layout-landthư mục . Nó sẽ tạo một thư mục và đặt hai tập tin bố trí lại với nhau.

nhập mô tả hình ảnh ở đây


2
Sai. Bạn không sử dụng chế độ xem thư mục (như "Dự án"). Bạn có thể đang sử dụng chế độ xem "Android", nhóm các tệp giống nhau trong ảnh chụp màn hình của bạn trong các thư mục ảo, nhưng cấu trúc thư mục thực tế vẫn là cách mà mọi bài đăng khác ở đây mô tả.
monK_
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.