Tài nguyên bố cục

Tài nguyên bố cục xác định cấu trúc cho giao diện người dùng trong một Hoạt động hoặc một thành phần trên giao diện người dùng.

vị trí tệp:
res/layout/filename.xml
Tên tệp sẽ được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến một tài nguyên View (hoặc lớp con).
mã tham chiếu tài nguyên:
Trong Java: R.layout.filename
Trong XML: @[package:]layout/filename
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

Lưu ý: Thành phần gốc có thể là phần tử ViewGroup, View hoặc <merge>, nhưng chỉ được có một phần tử gốc và phần tử đó phải chứa thuộc tính xmlns:android có không gian tên android như được hiển thị.

phần tử:
<ViewGroup>
Vùng chứa cho các phần tử View khác. Có nhiều loại đối tượng ViewGroup và mỗi đối tượng cho phép bạn chỉ định bố cục của các phần tử con theo nhiều cách. Các loại đối tượng ViewGroup khác nhau bao gồm LinearLayout, RelativeLayoutFrameLayout.

Bạn không nên giả định rằng mọi dẫn xuất của ViewGroup sẽ chấp nhận các View được lồng. Một số ViewGroup là cách triển khai lớp AdapterView, lớp này chỉ xác định các lớp con của nó từ một Adapter.

thuộc tính:

android:id
Mã nhận dạng tài nguyên. Tên tài nguyên riêng biệt cho phần tử mà bạn có thể dùng để lấy thông tin tham chiếu đến ViewGroup từ ứng dụng của mình. Vui lòng xem thêm về giá trị của android:id ở bên dưới.
android:layout_height
Thứ nguyên hoặc từ khoá. Bắt buộc. Chiều cao của nhóm, dưới dạng giá trị thứ nguyên (hoặc tài nguyên thứ nguyên) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ bên dưới.
android:layout_width
Thứ nguyên hoặc từ khoá. Bắt buộc. Chiều rộng của nhóm, dưới dạng giá trị thứ nguyên (hoặc tài nguyên thứ nguyên) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ bên dưới.

Lớp cơ sở ViewGroup hỗ trợ nhiều thuộc tính hơn và mỗi cách triển khai ViewGroup cũng hỗ trợ nhiều thuộc tính khác. Để tham khảo tất cả các thuộc tính có sẵn, vui lòng xem tài liệu tham khảo tương ứng cho lớp ViewGroup (chẳng hạn như thuộc tính tệp XLM LinearLayout).

<View>
Một thành phần giao diện người dùng riêng lẻ, thường được gọi là "tiện ích". Các loại đối tượng View khác nhau bao gồm TextView, ButtonCheckBox.

thuộc tính:

android:id
Mã nhận dạng tài nguyên. Tên tài nguyên riêng biệt cho phần tử mà bạn có thể dùng để lấy thông tin tham chiếu đến View từ ứng dụng của mình. Vui lòng xem thêm về giá trị của android:id ở bên dưới.
android:layout_height
Thứ nguyên hoặc từ khoá. Bắt buộc. Chiều cao của phần tử, dưới dạng giá trị thứ nguyên (hoặc tài nguyên thứ nguyên) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ bên dưới.
android:layout_width
Thứ nguyên hoặc từ khoá. Bắt buộc. Chiều rộng của phần tử, dưới dạng giá trị thứ nguyên (hoặc tài nguyên thứ nguyên) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ bên dưới.

Lớp cơ sở View hỗ trợ nhiều thuộc tính hơn và mỗi cách triển khai View cũng hỗ trợ nhiều thuộc tính khác. Vui lòng đọc phần Bố cục để biết thêm thông tin. Để tham khảo tất cả các thuộc tính có sẵn, vui lòng xem tài liệu tham khảo tương ứng (ví dụ như thuộc tính XML của TextView (Chế độ xem văn bản)).

<requestFocus>
Mọi phần tử đại diện cho đối tượng View đều có thể bao gồm phần tử trống này. Phần tử trống này sẽ tập trung vào phần tử mẹ ban đầu trên màn hình. Bạn chỉ có thể có một trong các phần tử này trên mỗi tệp.
<include>
Đưa tệp bố cục vào bố cục này.

thuộc tính:

layout
Tài nguyên bố cục. Bắt buộc. Tham chiếu đến tài nguyên bố cục.
android:id
Mã nhận dạng tài nguyên. Ghi đè mã nhận dạng được cấp cho chế độ xem gốc trong bố cục đi kèm.
android:layout_height
Thứ nguyên hoặc từ khoá. Cơ chế ghi đè chiều cao được cấp cho chế độ xem gốc trong bố cục đi kèm. Chỉ có hiệu lực nếu android:layout_width cũng được khai báo.
android:layout_width
Thứ nguyên hoặc từ khoá. Cơ chế ghi đè chiều rộng được cấp cho chế độ xem gốc trong bố cục đi kèm. Chỉ có hiệu lực nếu android:layout_height cũng được khai báo.

Bạn có thể đưa mọi thuộc tính bố cục nào khác vào <include> được phần tử gốc hỗ trợ trong bố cục đi kèm. Ngoài ra các thuộc tính này sẽ ghi đè các thuộc tính được xác định trong phần tử gốc.

Thận trọng: Nếu muốn ghi đè các thuộc tính bố cục bằng thẻ <include>, bạn phải ghi đè cả android:layout_heightandroid:layout_width để các thuộc tính bố cục khác có hiệu lực.

Một cách khác để thêm bố cục vào là sử dụng ViewStub. Đây là một Chế độ xem nhẹ không sử dụng không gian bố cục cho đến khi bạn tăng cường một cách rõ ràng, tại thời điểm đó, chế độ xem này sẽ bao gồm một tệp bố cục được xác định bằng thuộc tính android:layout. Để biết thêm thông tin về cách sử dụng ViewStub, vui lòng đọc Tải chế độ xem theo yêu cầu.

<merge>
Một phần tử gốc thay thế không được vẽ trong hệ phân cấp bố cục. Việc dùng phần tử này làm phần tử gốc sẽ hữu ích khi bạn biết rằng bố cục này sẽ được đặt vào một bố cục đã chứa Chế độ xem mẹ thích hợp để chứa các phần tử con của phần tử <merge>. Điều này đặc biệt hữu ích khi bạn có kế hoạch đưa bố cục này vào một tệp bố cục khác bằng cách sử dụng <include>, và bố cục này không yêu cầu một vùng chứa ViewGroup khác. Để biết thêm thông tin về cách hợp nhất các bố cục, vui lòng đọc phần Sử dụng lại bố cục với hàm <included/>.

Giá trị cho android:id

Đối với giá trị mã nhận dạng, bạn thường nên sử dụng biểu mẫu cú pháp sau: "@+id/name". Biểu tượng dấu cộng + cho biết đây là một mã nhận dạng tài nguyên mới và công cụ aapt sẽ tạo một số nguyên tài nguyên mới trong lớp R.java, nếu nó chưa có tồn tại. Ví dụ:

<TextView android:id="@+id/nameTextbox"/>

Tên nameTextbox hiện là một mã nhận dạng tài nguyên đi kèm với phần tử này. Sau đó, bạn có thể tham khảo TextView liên kết với mã nhận dạng trong Java:

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

Java

TextView textView = findViewById(R.id.nameTextbox);

Mã này trả về đối tượng TextView.

Tuy nhiên, nếu đã xác định tài nguyên cho mã (và mã này chưa được sử dụng), thì bạn có thể áp dụng mã nhận dạng đó cho phần tử View bằng cách loại trừ biểu tượng dấu cộng trong giá trị android:id.

Giá trị cho android:layout_heightandroid:layout_width:

Bạn có thể biểu thị giá trị chiều cao và chiều rộng bằng bất kỳ đơn vị thứ nguyên nào do Android hỗ trợ (px, dp, sp, pt, in, mm) hoặc bằng các từ khoá sau:

Giá trịMô tả
match_parent Đặt kích thước để khớp với kích thước của phần tử mẹ. Thêm API cấp 8 vào để ngừng sử dụng fill_parent.
wrap_content Chỉ đặt kích thước theo kích thước cần thiết để phù hợp với nội dung của phần tử này.

Phần tử chế độ xem tuỳ chỉnh

Bạn có thể tạo các phần tử ViewViewGroup tuỳ chỉnh của riêng mình, sau đó áp dụng cho bố cục giống như phần tử bố cục chuẩn. Bạn cũng có thể chỉ định các thuộc tính được hỗ trợ trong phần tử XML. Để tìm hiểu thêm, vui lòng xem hướng dẫn dành cho nhà phát triển Thành phần tuỳ chỉnh.

ví dụ:
Tệp XML được lưu vào res/layout/main_activity.xml:
<?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:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

Mã xử lý ứng dụng này sẽ tải bố cục cho một Activity, trong phương thức onCreate():

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
xem thêm: