Đặt hành vi của vùng chứa

Để định cấu hình hành vi của vùng chứa FlexBox, hãy tạo một FlexBoxConfig khối và cung cấp khối đó bằng tham số config.

FlexBox(
    config = {
        direction(FlexDirection.Column)
        wrap(FlexWrap.Wrap)
        alignItems(FlexAlignItems.Center)
        alignContent(FlexAlignContent.SpaceAround)
        justifyContent(FlexJustifyContent.Center)
        gap(16.dp)
    }
) { // child items
}

Sử dụng FlexBoxConfig để xác định hướng bố cục, hành vi gói, căn chỉnh và khoảng cách giữa các mục.

Hướng bố cục

Hàm direction đặt trục chính, xác định hướng bố cục của các mục. Hàm này chấp nhận các giá trị sau:

  • Row (mặc định): Đặt trục chính theo chiều ngang. Trong các ngôn ngữ từ trái sang phải, hướng này sẽ là từ trái sang phải, ngược lại trong các ngôn ngữ từ phải sang trái.
  • RowReverse: Đảo ngược hướng của Row.
  • Column: Đặt trục chính theo chiều dọc, từ trên xuống dưới.
  • ColumnReverse: Đảo ngược hướng của Column.

Căn chỉnh các mục và phân bổ khoảng trống

Các phần sau đây mô tả cách căn chỉnh các mục và phân bổ khoảng trống dọc theo trục chính và trục ngang.

Dọc theo trục chính

Sử dụng justifyContent để phân bổ các mục dọc theo trục chính. Bảng sau đây cho thấy hành vi khi hướng là Row.

Hình minh hoạ một trục chính nằm ngang.

Start

Các mục được căn chỉnh theo phần đầu của trục chính.

Center

Các mục được căn chỉnh vào giữa trục chính.

End

Các mục được căn chỉnh đến cuối trục chính.

SpaceBetween

Các mục được phân phối dọc theo trục chính và có khoảng cách giữa các mục.

SpaceAround

Các mục được phân phối dọc theo trục chính với khoảng trống xung quanh.

SpaceEvenly

Các mục được phân phối dọc theo trục chính với khoảng trống đồng đều xung quanh.

Dọc theo trục ngang

Sử dụng alignItems để căn chỉnh các mục dọc theo trục ngang trong một dòng. Bạn có thể ghi đè hành vi này bằng các mục riêng lẻ bằng cách sử dụng đối tượng sửa đổi alignSelf.

Các hình ảnh sau đây cho thấy hành vi khi hướng là Row:

Hình minh hoạ trục chéo dọc. Các mục được căn chỉnh theo đầu trục chéo. Các mục được căn chỉnh ở cuối trục chéo. Các mục được căn chỉnh vào giữa trục chéo. Các mục được kéo giãn để lấp đầy trục chéo. Các mục được căn chỉnh theo đường cơ sở dọc theo trục chéo.

Start

End

Center

Stretch

Baseline

Sử dụng alignContent để căn chỉnh các dòng theo trục ngang và phân bổ khoảng trống giữa các dòng. Thuộc tính này chỉ áp dụng khi có nhiều dòng (bật tính năng gói). Các hình ảnh sau đây cho thấy hành vi khi hướng là Row:

Hình minh hoạ trục chéo dọc. Nhiều dòng mục được căn chỉnh theo đầu trục chéo. Nhiều dòng mục được căn chỉnh ở cuối trục chéo. Nhiều dòng mặt hàng được căn chỉnh vào giữa trục ngang. Nhiều dòng mặt hàng được kéo dài để lấp đầy trục chéo. Nhiều dòng mục được phân phối dọc theo trục ngang với khoảng cách giữa các dòng. Nhiều dòng mục được phân phối dọc theo trục ngang với khoảng trống xung quanh.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

Gói các mục

Tính năng gói cho phép vùng chứa FlexBox trở thành nhiều dòng, di chuyển các mục không vừa vào một hàng hoặc cột mới dọc theo trục ngang. Định cấu hình hành vi gói bằng cách sử dụng wrap.

Giá trị FlexWrap

Ví dụ sử dụng hướng Row

NoWrap (mặc định): Ngăn các mục gói. Các mục tràn nếu kích thước chính không đủ.

Các mục trong một dòng tràn ra ngoài vùng chứa vì tính năng xuống dòng bị tắt.

Wrap: Khi không có đủ khoảng trống cho một mục (cộng với bất kỳ khoảng cách nào), một dòng mới sẽ được tạo theo hướng của trục ngang. Ví dụ: nếu hướng là Row, một dòng mới sẽ được thêm bên dưới.

Các mục sẽ xuống dòng mới bên dưới vì tính năng xuống dòng được bật.

WrapReverse: Tương tự như Wrap, ngoại trừ việc dòng mới được thêm theo hướng ngược lại với trục ngang. Ví dụ: nếu hướng là Row, một dòng mới sẽ được thêm bên trên.

Các mục chuyển sang dòng mới ở trên vì bạn đã bật tính năng chuyển dòng ngược.

Ví dụ sau đây cho thấy cách hoạt động của thuật toán gói FlexBox. Vùng chứa FlexBox có kích thước chính là 100dp, với wrap được đặt thành FlexWrap.Wrap và khoảng cách là 8dp. Vùng chứa này có 3 mục với basis lần lượt là 20dp, 40dp50dp.

Có khoảng trống 100dp trong dòng. Phần tử con 1 là 20dp. Có khoảng trống, vì vậy, Phần tử con 1 được đặt vào dòng.

Mục đầu tiên được đặt trong vùng chứa FlexBox.
Hình 1. Mục đầu tiên được đặt trong vùng chứa FlexBox.

Có khoảng trống 80dp trong dòng. Khoảng cách là 8dp. Phần tử con 2 là 40dp. Khoảng trống cần thiết là 48dp. Có khoảng trống, vì vậy, khoảng cách và Phần tử con 2 được đặt vào dòng.

Mục đầu tiên được đặt trong vùng chứa FlexBox.
Hình 2. Mục thứ hai được đặt trong vùng chứa FlexBox sau mục đầu tiên.

Có khoảng trống 32dp trong dòng. Khoảng cách là 8dp. Phần tử con 3 là 50dp. Khoảng trống cần thiết là 58dp. Không có đủ khoảng trống trong dòng hiện tại, vì vậy, Phần tử con 3 được đặt trong một dòng mới.

Mặt hàng thứ ba được đặt trên một dòng mới vì không vừa với dòng đầu tiên.
Hình 3. Mục thứ ba được đặt trên một dòng mới vì không vừa với dòng đầu tiên.

Thêm khoảng cách giữa các mục

Thêm khoảng cách giữa các hàng và cột bằng cách sử dụng rowGapcolumnGap. Điều này hữu ích để tránh thêm đối tượng sửa đổi khoảng cách vào các phần tử con.

Khoảng trống hàng sẽ thêm khoảng trống theo chiều dọc giữa các mục. Khoảng trống giữa các cột sẽ thêm khoảng trống theo chiều ngang giữa các mục. Khoảng trống sẽ thêm cả khoảng cách ngang và dọc giữa các mục.

rowGap

thêm khoảng trống theo chiều dọc giữa các mục và dòng.

columnGap

thêm khoảng trống theo chiều ngang giữa các mục và dòng.

gap là một hàm tiện lợi giúp thêm cả columnGaprowGap.