Bố cục tuyến tính

LinearLayout là một nhóm khung nhìn giúp căn chỉnh tất cả phần tử con theo hướng dọc hoặc ngang. Bạn có thể chỉ định hướng bố cục bằng thuộc tính android:orientation.

Lưu ý: Để hỗ trợ hiệu suất và công cụ tốt hơn, bạn nên xây dựng bố cục bằng ConstraintLayout.

Tất cả phần tử con của LinearLayout được xếp chồng lên nhau nên một danh sách theo hướng dọc sẽ chỉ có một phần tử con trong mỗi hàng, bất kể chiều rộng của phần tử con là bao nhiêu và danh sách theo hướng ngang sẽ có chiều cao bằng chiều cao hàng (chiều cao của phần tử con cao nhất cộng với khoảng đệm). LinearLayout tuân theo lề giữa các phần tử con và trọng lực (căn phải, giữa hoặc trái) của từng con.

Tỷ lệ kích thước bố cục

LinearLayout cũng hỗ trợ chỉ định tỷ lệ kích thước cho từng phần tử con có thuộc tính android:layout_weight. Thuộc tính này gán giá trị "quan trọng" (importance) cho khung nhìn xét về mức độ không gian chiếm dụng trên màn hình. Giá trị tỷ lệ kích thước lớn cho phép khung nhìn mở rộng để lấp đầy không gian còn lại trong khung nhìn cha. Khung nhìn con có thể chỉ định giá trị tỷ lệ kích thước, sau đó khoảng không gian còn lại trong nhóm khung nhìn sẽ được chỉ định cho phần tử con tương ứng với tỷ lệ kích thước đã khai báo. Tỷ lệ kích thước mặc định là 0.

Phân bổ đồng đều

Để tạo bố cục tuyến tính trong đó mỗi phần tử con sử dụng cùng một mức độ không gian trên màn hình, hãy đặt giá trị android:layout_height của mỗi khung nhìn thành "0dp" (đối với bố cục dọc) hoặc android:layout_width của mỗi khung nhìn thành "0dp" (đối với bố cục ngang). Sau đó, đặt giá trị android:layout_weight của mỗi khung nhìn thành "1".

Phân bổ không đồng đều

Bạn cũng có thể tạo bố cục tuyến tính trong đó mức độ sử dụng không gian trên màn hình của các phần tử con là khác nhau:

  • Nếu có ba trường văn bản và hai trường trong số đó khai báo tỷ lệ kích thước là 1 và trường còn lại không được khai báo, thì trường văn bản thứ ba không có tỷ lệ kích thước sẽ không tăng. Thay vào đó, trường văn bản thứ ba này chỉ chiếm dụng những khoảng không gian do nội dung của nó bắt buộc. Mặt khác, hai trường văn bản còn lại mở rộng như nhau để lấp đầy không gian còn lại sau khi cả ba trường được đo lường.
  • Nếu có ba trường văn bản và hai trường trong số đó khai báo tỷ lệ kích thước là 1, còn trường thứ ba là 2 (thay vì 0), thì giờ đây, trường thứ ba này quan trọng hơn cả hai trường còn lại, nên trường này sẽ chiếm một nửa không gian còn lại, trong khi hai trường đầu tiên dùng chung phần còn lại.

Đoạn mã sau đây minh hoạ cách tỷ lệ kích thước bố cục hoạt động ra sao trong hoạt động "gửi tin nhắn". Trường Tới, dòng Chủ đề và nút Gửi chỉ chiếm chiều cao mà các phần tử đó cần. Cấu hình này cho phép tin nhắn chiếm dụng toàn bộ chiều cao còn lại của hoạt động.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/send" />
</LinearLayout>

Để biết thông tin chi tiết về các thuộc tính có sẵn cho mỗi khung nhìn con của một LinearLayout, hãy xem LinearLayout.LayoutParams.