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 thành phần gốc và thành phần đó 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 qua ứ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ị phương diện (hoặc tài nguyên phương diện) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ dưới đây.
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ị phương diện (hoặc tài nguyên phương diện) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ dưới đây.

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 chiếu tất cả thuộc tính hiện có, vui lòng xem tài liệu tham khảo tương ứng cho lớp ViewGroup (ví dụ: thuộc tính XLM của 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 qua ứ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ị phương diện (hoặc tài nguyên phương diện) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ dưới đây.
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ị phương diện (hoặc tài nguyên phương diện) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Vui lòng xem các giá trị hợp lệ dưới đây.

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 chiếu tất cả thuộc tính hiện có, vui lòng xem tài liệu tham khảo tương ứng (ví dụ: thuộc tính XML của TextView).

<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 khác vào <include> được thành phần 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 thành phần gốc.

Thận trọng: Nếu muốn ghi đè thuộc tính bố cục bằng thẻ <include> thì 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 Thành phần hiển thị gọn 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. Khi đó, thành phần hiển thị 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>, đồng thời bố cục này không đòi hỏi một vùng chứa ViewGroup khác. Để biết thêm thông tin về bố cục hợp nhất, vui lòng đọc phần Sử dụng lại bố cục bằng <include>.

Giá trị cho android:id

Đối với giá trị mã nhận dạng, thường thì bạn 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 chưa có). 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 chiếu 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 mã nhận dạng (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 cứ đơn vị phương diệ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 Thiết lập phương diện khớp với phương diện của phần tử mẹ. Thêm API cấp 8 vào để ngừng sử dụng fill_parent.
wrap_content Chỉ thiết lập phương diện theo kích thước cần thiết cho 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: