Tài nguyên bố cục

Tài nguyên bố cục xác định cấu trúc của giao diện người dùng trong một Activity 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 đượ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 ý: Phần tử 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 là android như hiển thị trong ví dụ cú pháp trước.

phần tử:
<ViewGroup>
Vùng chứa của 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.

Đừng giả định rằng mọi quá trình dẫn xuất của ViewGroup đều chấp nhận các khung hiển thị lồng nhau. Một số nhóm khung hiển thị là cách triển khai lớp AdapterView, lớp này chỉ xác định các lớp con của chúng từ Adapter.

Thuộc tính:

android:id
Mã tài nguyên. Là 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. Để biết thêm thông tin, hãy xem phần Giá trị của android:id.
android:layout_height
Phương diệ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"). Để biết thêm thông tin, hãy xem phần Giá trị của android:layout_height và android:layout_width.
android:layout_width
Phương diệ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"). Để biết thêm thông tin, hãy xem phần Giá trị của android:layout_height và android:layout_width.

Lớp cơ sở ViewGroup hỗ trợ thêm nhiều thuộc tính và mỗi cách triển khai ViewGroup cũng hỗ trợ thêm nhiều thuộc tính nữa. Để 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 XML của LinearLayout).

<View>
Là một thành phần riêng lẻ trên giao diện người dùng, thường được gọi là một 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ã tài nguyên. Là 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. Để biết thêm thông tin, hãy xem phần Giá trị của android:id.
android:layout_height
Phương diệ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"). Để biết thêm thông tin, hãy xem phần Giá trị của android:layout_height và android:layout_width.
android:layout_width
Phương diện hoặc từ khoá. Bắt buộc. Chiều rộng của phần tử, dưới dạng giá trị kích thước (hoặc tài nguyên kích thước) hoặc từ khoá ("match_parent" hoặc "wrap_content"). Để biết thêm thông tin, hãy xem phần Giá trị của android:layout_height và android:layout_width.

Lớp cơ sở View hỗ trợ thêm nhiều thuộc tính và mỗi cách triển khai View cũng hỗ trợ thêm nhiều thuộc tính nữa. Để biết thêm thông tin, hãy đọc bài viết Bố cụ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, ví dụ: thuộc tính XML TextView.

<requestFocus>
Mọi phần tử biểu thị một đối tượng View đều có thể bao gồm phần tử trống này. Đây là phần tử sẽ giúp phần tử mẹ được chú ý đầu tiên 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ã 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
Phương diệ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
Phương diệ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 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 đè 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 để đưa bố cục vào là sử dụng ViewStub: đây là một khung hiển thị gọn nhẹ không tốn không gian bố cục cho đến khi bạn tăng cường một cách rõ ràng. Khi đó, khung 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 bài viết Tải khung hiển thị theo yêu cầu.

<merge>
Là một phần tử gốc thay thế không được vẽ trong hệ phân cấp bố cục. Bạn nên dùng phần tử này làm phần tử gốc trong trường hợp bố cục này sẽ được đặt vào một bố cục đã chứa View 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 bài viết Sử dụng lại bố cục bằng <include>.

Giá trị của android:id

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

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

Tên nameTextbox hiện là một mã 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 giá trị nhận dạng (và giá trị này chưa được sử dụng), thì bạn có thể áp dụng mã đó cho phần tử View bằng cách xoá biểu tượng dấu cộng trong giá trị android:id.

Giá trị của android:layout_height và android:layout_width

Giá trị chiều cao và chiều rộng được biểu thị bằng bất kỳ đơ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ử khung hiển thị tuỳ chỉnh

Bạn có thể tạo các phần tử ViewViewGroup tuỳ chỉnh, sau đó áp dụng cho bố cục giống như một 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. Để biết thêm thông tin, hãy xem bài viết Tạo thành phần khung hiển thị 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 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: