Có hai cách để thực hiện việc này bằng cách sử dụng ConstraintLayout
: Chuỗi và Nguyên tắc . Để sử dụng Chuỗi, hãy đảm bảo bạn đang sử dụng ConstraintLayout
Beta 3 hoặc mới hơn và nếu bạn muốn sử dụng trình chỉnh sửa bố cục trực quan trong Android Studio, hãy đảm bảo bạn đang sử dụng Android Studio 2.3 Beta 1 hoặc mới hơn.
Phương pháp 1 - Sử dụng Chuỗi
Mở trình soạn thảo bố cục và thêm các widget của bạn như bình thường, thêm các ràng buộc cha nếu cần. Trong trường hợp này, tôi đã thêm hai nút có ràng buộc ở dưới cùng của cha và bên của cha mẹ (bên trái cho nút Lưu và bên phải cho nút Chia sẻ):
Lưu ý rằng ở trạng thái này, nếu tôi chuyển sang chế độ xem ngang, các chế độ xem không lấp đầy cha mẹ mà được neo vào các góc:
Làm nổi bật cả hai chế độ xem, bằng cách nhấp Ctrl / Cmd hoặc bằng cách kéo hộp quanh các chế độ xem:
Sau đó nhấp chuột phải vào các chế độ xem và chọn "Trung tâm theo chiều ngang":
Điều này thiết lập một kết nối hai chiều giữa các khung nhìn (đó là cách xác định Chuỗi). Theo mặc định, kiểu chuỗi là "lây lan", được áp dụng ngay cả khi không bao gồm thuộc tính XML. Bám sát kiểu chuỗi này nhưng thiết lập độ rộng của các chế độ xem của chúng tôi để 0dp
cho phép các chế độ xem lấp đầy không gian có sẵn, trải đều trên toàn bộ cha mẹ:
Điều này đáng chú ý hơn trong chế độ xem phong cảnh:
Nếu bạn muốn bỏ qua trình soạn thảo bố cục, XML kết quả sẽ trông 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">
<Button
android:id="@+id/button_save"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/button_save_text"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="4dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@+id/button_share"
app:layout_constraintHorizontal_chainStyle="spread" />
<Button
android:id="@+id/button_share"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/button_share_text"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintLeft_toRightOf="@+id/button_save"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
Chi tiết:
- đặt chiều rộng của mỗi mục thành
0dp
hoặc MATCH_CONSTRAINT
cho phép các chế độ xem lấp đầy cha mẹ (tùy chọn)
- các khung nhìn phải được liên kết với nhau hai chiều (bên phải nút lưu liên kết đến nút chia sẻ, bên trái liên kết nút chia sẻ để lưu nút), điều này sẽ tự động xảy ra thông qua trình chỉnh sửa bố cục khi chọn "Trung tâm theo chiều ngang"
- Chế độ xem đầu tiên trong chuỗi có thể chỉ định kiểu chuỗi thông qua
layout_constraintHorizontal_chainStyle
, xem tài liệu về các kiểu chuỗi khác nhau, nếu kiểu chuỗi bị bỏ qua, mặc định là "lây lan"
- trọng số của chuỗi có thể được điều chỉnh thông qua
layout_constraintHorizontal_weight
- ví dụ này dành cho chuỗi ngang, có các thuộc tính tương ứng cho chuỗi dọc
Phương pháp 2 - Sử dụng Hướng dẫn
Mở bố cục của bạn trong trình chỉnh sửa và nhấp vào nút hướng dẫn:
Sau đó chọn "Thêm hướng dẫn dọc":
Một hướng dẫn mới sẽ xuất hiện, theo mặc định, có thể sẽ được neo vào bên trái trong các giá trị tương đối (được biểu thị bằng mũi tên quay sang trái):
Nhấp vào mũi tên quay sang trái để chuyển nó thành giá trị phần trăm, sau đó kéo hướng dẫn đến dấu 50%:
Hướng dẫn bây giờ có thể được sử dụng như một mỏ neo cho các quan điểm khác. Trong ví dụ của tôi, tôi đã gắn bên phải nút lưu và bên trái nút chia sẻ với hướng dẫn:
Nếu bạn muốn các khung nhìn lấp đầy không gian có sẵn thì ràng buộc phải được đặt thành "Bất kỳ kích thước nào" (các đường uốn lượn chạy theo chiều ngang):
(Điều này giống như cài đặt layout_width
thành 0dp
).
Một hướng dẫn cũng có thể được tạo bằng XML khá dễ dàng thay vì sử dụng trình soạn thảo bố cục:
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />