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
, RelativeLayout
và FrameLayout
.
Đừ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
, Button
và CheckBox
.
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_height
và android: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ử View
và ViewGroup
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:
-