Thay vì dùng code Java tạo view trực tiếp, thực tế hầu hết các giao diện sẽ sử dụng các file XML, trong đó mô tả các thành phần của view (view cha, view con, mối liên hệ,...) và XML này chính là một file tài nguyên trong thư mục layout.
Từ file tài nguyên XML chứa giao diện, Android có cơ chế nạp và phân tích XML này đó là LayoutInflater, nó sẽ đọc nội dung XML, căn cứ vào nội dung nó sẽ tạo ra hệ thống các view tương đương với cách viết code Java. Chẳng hạn, trong onCreate của Activity mà phương thức setContentView(xmlId) được gọi, nó sẽ tự động đọc nội dung XML của tài nguyên theo định danh id, căn cứ nội dung đọc được nó sẽ tạo ra giao diện, rồi gán cho Activity.
Sử dụng XML để mô tả giao diện là cách thông dụng trong Android, ngoài ra file XML còn rất nhiều chức năng khác như lưu các tham số cấu hình ứng dụng, tạo ra các hình ảnh vector, mô tả các hoạt cảnh,...
XML là gì? XML (Extensible Markup Language - ngôn ngữđánh dấu mở rộng) là một file dạng văn bản (text) dùng để lưu dữ liệu. Các giá trị dữ liệu được lưu thành các node phần tử. Mỗi node phần tử sẽ bắt đầu bẳng một thẻ (tag) mở và kết thúc bằng thẻ đóng. Tag là thẻ phần tử, tên thẻ này do bạn đặt, hoặc do ứng dụng quy đinh. Ví dụ tên thẻ là TextView thì Inflate của Android sẽđọc và biết đây là bắt đầu mô tả một đối tượng TextView.
Những quy tắc này áp dụng để viết tài nguyên dang XML cho Android như các file layout, Manifest, Drawable,...
Ví dụ ta có file XML như sau:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:padding="10dp" android:text="Hello Android" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
Đọc XML trên, ta thấy nút cha là phần tử ConstraintLayout với các thuộc tính như android:layout_width,... bên trong nó chứa một phần tử con là TextView với các thuộc tính như android:id, android:text ...
ThS. Bùi Trung Úy 56 xmlns:android="http://schemas.android.com/apk/res/android" là thiết lập namspace, đây là thiết lập để tránh các thuộc tính trùng nhau về tên. Với định nghĩa trên thì nó có namespace là android, và khi đó thay vì viết thuộc tính layout_width="wrap_content" bạn phải viết đầy đủ cả namespace thành android:layout_width="wrap_content" (làm điều này để phòng tránh xung đột về tên, ví dụ sau này bạn cũng muốn xây dựng một thuộc tính tên trùng layout_width thì bạn cần viết yournamespace:layout_width = "wrap_content").
Sau khi có layout viết theo XML, để nạp vào Activity ta dùng bằng phương thức setContentView(xmlId).
Việc thiết kế giao diện dùng mã XML đòi hỏi chúng ta phải nhớ rất nhiều tên thành phần và các thuộc tính tương ứng. Bên cạnh đó cú pháp cũng cần phải chú ý. Do đó, thiết kế giao diện dùng công cụ trực quan thường được ưu tiên và chỉ dùng đến mã XML trong trường hợp cần một vài can thiệp nhỏ đến giao diện.