Professional Documents
Culture Documents
Thuyết trình
Thuyết trình
Thuyết trình
RelativeLayout
LinearLayout
GridLayout
TableLayout
FrameLayout
ConstraintLayout.
1. RelativeLayout
RelativeLayout là loại Layout mà trong Layout vị trí của mỗi view
con sẽ được xác định so với view khác hoặc so với thành phần cha của
chúng thông qua ID. Bạn có thể sắp xếp 1 view ở bên trái, bên phải
view khác hoặc ở giữa màn hình.
1.1 Thuộc tính Gravity
Các View con khi đã định vị xong trong RelativeLayout, giả sử coi
như tất cả các View con nằm vừa trong một đường biên chữ nhật, thì
cả khối các View con này có thể dịch chuyển tới những vị trí nhất
định trong RelativeLayout bằng thuộc tính: android:gravity, nó nhận
các giá trị (có thể tổ hợp lại với ký hiệu | )
Giá trị Ý nghĩa
Vị trí của View con trong RelativeLayout có thể thiết lập bằng cách
chỉ ra mối liên hệ vị trí với view cha, như căn thẳng cạnh trái View
cha với View con, căn thẳng cạnh phải View cha với View con… Các
thuộc tính thực hiện chức năng này như sau:
Thuộc tính Ý nghĩa
android:layout_alignParentBottom true căn thẳng cạnh dưới view con với cạnh dưới View cha
android:layout_alignParentLeft true căn thẳng cạnh trái view con với cạnh trái View cha
android:layout_alignParentRight true căn thẳng cạnh phải view con với cạnh phải View cha
android:layout_alignParentTop true căn thẳng cạnh trên view con với cạnh trên View cha
android:layout_centerHorizontal true căn view con vào giữa View cha theo chiều ngang
android:layout_centerVertical true căn view con vào giữa View cha theo chiều đứng
1.3 Định vị các view con với nhau bằng thuộc tính liên hệ với nhau
Tất cả các thuộc tính dưới đây cần phải truyền vào một ID @+id/
• android:layout_alignTop – Chỉ định đỉnh của thành phần này
sẽ được canh theo đỉnh của thành phần gọi đến bằng ID.
• android:layout_alignBottom – Chỉ định đáy của thành phần
này sẽ được canh theo đáy của thành phần gọi đến bằng ID.
• android:layout_alignStart – Chỉ định cạnh start của thành
phần này sẽ được canh theo cạnh start của thành phần gọi đến bằng
ID.
• android:layout_alignEnd – Chỉ định cạnh end của thành phần
này sẽ được canh theo cạnh end của thành phần gọi đến bằng ID.
• android:layout_alignBaseline – Chỉ định baseline của thành
phần này sẽ được canh theo baseline của thành phần gọi đến bằng ID.
Baseline này bạn không nhìn thấy được, dùng để canh chỉnh cho text
hiển thị bên trong widget, do đó sẽ hữu dụng khi canh chỉnh các
TextView với nhau).
• android:layout_above – Chỉ định thành phần này sẽ nằm ở
trên so với thành phần gọi đến bằng ID.
• android:layout_below – Chỉ định thành phần này sẽ nằm dưới
so với thành phần gọi đến bằng ID.
• android:layout_toStartOf – Chỉ định thành phần này sẽ nằm
bên phía start so với thành phần gọi đến bằng ID.
• android:layout_toEndOf – Chỉ định thành phần này sẽ nằm
bên phía end so với thành phần gọi đến bằng ID.
• android:layout_toLeftOf – Chỉ định thành phần này sẽ nằm
bên phía trái so với thành phần gọi đến bằng ID.
• android:layout_toRightOf – Chỉ định thành phần này sẽ nằm
bên phía phải so với thành phần gọi đến bằng ID.
2. LinearLayout
LinearLayout là loại layout sẽ sắp xếp các view theo chiều dọc hoặc
ngang theo thứ tự của các view.
Mặc định thì các thành phần con bên trong LinearLayout sẽ được
“hút” về start-top theo “lực hấp dẫn” mặc định Thuộc tính
android:gravity để căn chỉnh các View nằm ở vị trí nào trong
LinearLayout, nó nhận các giá trị (có thể tổ hợp lại với ký hiệu |)
Ví dụ android:gravity=”right|center”
Các View con trong LinearLayout có thể gán cho nó một giá trị trọng
số bằng thuộc tính android:layout weight ví dụ như:
android:layout_weight="2"; android:layout_weight="1.5" ... Nếu
View không gán giá trị này coi như nó có trọng số bằng không.
Trường hợp LinearLayout không sử dụng đến thuộc tính
android:weightSum.
Khi chúng ta muốn các view tự động full màn hình thì sử dụng
android:weightSum.
3. GridLayout
GridLayout của Android đơn giản chỉ là 1 layout dạng lưới và ta có thể
chia các cột và dòng cho cái lưới đó, các view sẽ được dặt vào các ô
trong cái lưới này.
Không giống như hầu hết các lưới ở các bộ công cụ khác, Android
GridLayout không liên kết dữ liệu với các hàng hoặc cột. Thay vào
đó, tất cả mọi thứ được làm với Aligment (căn chỉnh) và sự linh hoạt
được liên kết với các thành phần tự thân của nó. Sự linh hoạt của các
cột được suy ra từ thuộc tính gravity (trọng lực) của các thành phần
bên trong các cột. Nếu mọi thành phần định nghĩa một gravity, cột
được coi là linh hoạt, nếu không cột được coi là không linh hoạt
Số dòng và cột trong lưới có thể được khai báo bằng cách sử dụng
thuộc tính android: rowCount và android: columnCount.
Tương tự, hướng hiển thị của GridLayout có thể tùy ý được xác định
thông qua thuộc tính android: orientation.
Các Views có thể được thêm vào GridLayout bằng cách khai báo các
phần tử bên trong cấu trúc <GridLayout> trong tập tin XML. Nếu
không có giá trị hàng và cột nào được khai báo cho một View thì nó
được định vị tự động bởi lớp GridLayout dựa trên cấu hình của
Layout và vị trí của khung nhìn trong tập tin XML. XML sau đây đặt
bốn nút trong GridLayout, với mỗi View được đặt từ góc trái của ô.
4. TableLayout
Với TableLayout nó sẽ sắp xếp các View con bên trong thành dạng
bảng. Mỗi hàng là một đối tượng view TableRow bên trong
TableRow chứa các View con, mỗi View con này nằm ở vị trí một ô
bảng (cell). Cột / hàng trong bảng bắt đầu từ số 0.
TableLayout kế thừa từ LinearLayout, cho phép hiển thị các đối tượng
theo nhiều dòng (TableRow). Mỗi dòng có thể chứa nhiều View, mỗi
View được xem là một cột. Đặc biệt TableLayout lấy dòng có số
lượng View nhiều nhất làm số cột, tức là nếu TableLayout có 3 dòng:
dòng đầu tiên có 2 View, dòng thứ hai có 5 View và dòng cuối cùng
có 4 View thì cột được xác định cho TableLayout này là 5.
TableLayout cho phép ta Meger(trộn) các ô trong TableRow bằng
cách thiết lập thuộc tính layout_span cho View trong TableRow:
Hay layout_column để di chuyển vị trí của View tới một cột nào đó
trong TableRow:
5. FrameLayout
Framelayout là dạng layout cơ bản nhất khi gắn các view lên layout
này thì nó sẽ luôn giữ các view này ở phía góc trái màn hình và không
cho chúng ta thay đồi vị trí của chúng, các view đưa vào sau sẽ đè lên
view ở trước trừ khi bạn thiết lập transparent cho view sau đó.
Sử dụng trong các trường hợp xây dựng bố cục tổ chức hiển thị một
đối tượng duy nhất. Đối tượng mặc định vị trí top-left trên
FrameLayout, View khai báo sau sẽ chồng nên View khai báo trước,
có thể sử dụng thuộc tính Gravity để thiết lập lại vị trí.
1 <FrameLayout android:id="@+id/activity_main"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent>
4 <ImageView
5 android:layout_width="wrap_content"
6 android:layout_height="wrap_content"
7 app:srcCompat="@drawable/h0"
8 android:id="@+id/imageView3"/>
9 <ImageView
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 app:srcCompat="@drawable/h1"
13 android:id="@+id/imageView4" />
14 </FrameLayout>
6. ConstrainLayout
Đây là dạng layout mà các view nằm trong đó sẽ được xác định vị trí
tương đối với các view khác. Đây là dạng layout mà Google mới công
bố và được thiết kế để sử dụng hoàn toàn trên công cụ Design của
Android Studio.
Constraint layout dùng để định vị trí tương đối của Một control/View
trên màn hình với các phần tử khác trong layout:
Ta có thể xác định một constraint cho một hay nhiều mặt của một
view bằng chế độ kết nối bất kỳ sau đây:
Điểm neo nằm trên một View khác.
Một cạnh của layout.
Một guideline.
Android cung cấp các loại Constraint sau: Relative positioning,
Margins,Centering positioning,Visibility behavior,Dimension
constraints,Chains. Layout này được áp dụng để thiết kế các màn hình
Responsive không lệ thuộc vào độ phân giải.
Cấu trúc XML của ConstraintLayout được mô tả như sau:
1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 tools:context=".MainActivity">
9
10 <TextView
11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content"
13 android:text="Hello World!"
14 app:layout_constraintBottom_toBottomOf="parent"
15 app:layout_constraintLeft_toLeftOf="parent"
16 app:layout_constraintRight_toRightOf="parent"
17 app:layout_constraintTop_toTopOf="parent"/>
18
19 </androidx.constraintlayout.widget.ConstraintLayout>