Chuyển đến nội dung chính

Complex UI in Jetpack Compose


Jetpack Compose cung cấp nhiều công cụ để tạo giao diện người dùng. Với Jetpack Compose, bạn có thể dễ dàng tạo MVP cho dự án của mình và xem nó trông như thế nào. Ví dụ, để tạo danh sách trong Android theo cách thông thường, chúng ta nên sử dụng RecyclerView. Và tất nhiên, chúng ta cần tạo một bộ điều hợp và ngăn chứa chế độ xem để quản lý các mục trong RecyclerView. Trong Jetpack Compose, chúng ta có thể làm điều đó một cách dễ dàng.


@Composable
fun NewsList() {
LazyColumn {
items(rows) { item ->
Text(
modifier = Modifier
.height(80.dp),
text = item
)
}
}
}

Và đó là tất cả. Không cần bộ điều hợp, giá đỡ màn hình, v.v.

LazyColumn được sử dụng khi bạn muốn tạo một danh sách dọc. Để tạo chiều ngang, chúng tôi chỉ cần thay thế LazyColumn bằng LazyRow và danh sách của chúng tôi trở thành chiều ngang.


@Composable
fun NewsList() {
LazyRow {
items(rows) { item ->
Text(
modifier = Modifier
.height(80.dp),
text = item
)
}
}
}

Nếu bạn muốn lấy chỉ mục của mục, hãy thay thế các mục thành itemsIndexed và bạn sẽ truy cập vào chỉ mục của mục hiện tại


itemsIndexed(rows) { index, item ->
Text(
modifier = Modifier
.height(80.dp),
text = item
)
}

Điều gì sẽ xảy ra nếu chúng ta muốn tạo một danh sách lồng nhau. Điều đó chứa cả các mục dọc và ngang. Tất nhiên, cho mục đích này, chúng ta có thể sử dụng LazyVerticalGrid.


LazyVerticalGrid(cells = GridCells.Fixed(10)) {
itemsIndexed(rows) { row, item->
Text(
modifier = Modifier
.height(80.dp),
text = item
)
}
}

Nhưng có một vài vấn đề với giải pháp. Đầu tiên, LazyVerticalGrid vẫn được chú thích là ExperimentalFoundationApi. Cái thứ hai là nó cho phép lưới của bạn chỉ cuộn theo chiều dọc. Và điều thứ ba là nó luôn phù hợp với chiều rộng màn hình. Vì vậy, ví dụ: nếu bạn muốn có 8 cột, LazyVerticalGrid cố gắng đưa tất cả chúng vào màn hình. Đây là một ví dụ về công việc của nó.



Tôi nghĩ bạn sẽ đồng ý với tôi rằng nó trông hơi kỳ lạ, thay vì lắp tất cả các mục vào màn hình, tôi muốn có thể cuộn lưới của mình theo chiều ngang để xem tất cả các mục. Để thực hiện điều này sẽ sử dụng các thành phần mà chúng ta đã sử dụng trước LazyRow và LazyColumn. Sự kết hợp của hai thành phần này cho phép chúng tôi tạo ra một lưới có thể cuộn phức tạp với nỗ lực tối thiểu. Hãy bắt đầu!

Đầu tiên, chúng ta cần tạo LazyColumn để làm cho các mục của chúng ta có thể cuộn theo chiều dọc. Nhưng lúc này mục LazyColumn của chúng ta sẽ là LazyRow. Tôi đã thêm một số sửa đổi vào thành phần Văn bản để làm cho lưới đẹp hơn một chút.


LazyColumn {
itemsIndexed(rows) { index, row ->
LazyRow {
itemsIndexed(columns) { index, column ->
Text(
modifier = Modifier
.padding(8.dp)
.background(Color.Red)
.width(100.dp)
.height(100.dp),
textAlign = TextAlign.Center,
color = Color.White,
text = "Row $row Column = $column"
)
}
}

}
}

hàng - trong một mảng các chuỗi có kích thước là 10


cột - trong một mảng các chuỗi có kích thước là 10


Vì vậy, chúng ta sẽ có một lưới với 10 hàng và các cột có cùng kích thước


Và chúng tôi chạy mã của mình, chúng tôi sẽ thấy một cái gì đó như thế này:



Sử dụng giải pháp này, chúng tôi đạt được một số lợi ích:

  1. Nhiều cơ hội tùy chỉnh hơn. Khả năng thay đổi mọi mục trong lưới hoặc chỉ thay đổi các mục trên cột hoặc hàng cụ thể.

  2. Kiểm soát hoàn toàn lưới điện của chúng ta.

  3. Cuộn vô hạn theo cả hai hướng.


Phần kết luận


Jetpack Compose cung cấp nhiều công cụ để tạo giao diện người dùng phức tạp. Hôm nay chúng ta đã học các cách tạo lưới trong Jetpack Compose. Nếu bạn muốn tạo một lưới đơn giản mà không có các tính năng như cuộn ngang hoặc cuộn vô hạn, bạn nên sử dụng LazyVerticalGrid. Nếu không, tôi khuyên bạn nên sử dụng kết hợp LazyRow và LazyColumn cho những mục đích này.


Cảm ơn vì đã đọc và hẹn gặp lại!

 

Nhận xét

Bài đăng phổ biến từ blog này

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolba...

Announcing Flutter 2

  Phụ lục: Flutter on the web Flutter 2 on desktops, foldables, and embedded devices The growing Flutter ecosystem Dart: The secret sauce behind Flutter Flutter 2: Available now Hôm nay, chúng tôi sẽ công bố Flutter 2: một bản nâng cấp lớn cho Flutter cho phép các nhà phát triển tạo các ứng dụng đẹp, nhanh chóng và di động cho bất kỳ nền tảng nào. Với Flutter 2, bạn có thể sử dụng cùng một cơ sở mã để gửi các ứng dụng gốc cho năm hệ điều hành: IOS, Android, Windows, macOS và Linux; cũng như trải nghiệm web nhắm mục tiêu các trình duyệt như Chrome, Firefox, Safari hoặc Edge. Flutter thậm chí có thể được nhúng vào ô tô, TV và thiết bị gia dụng thông minh, mang đến trải nghiệm di động và lan tỏa nhất cho thế giới điện toán xung quanh. Mục tiêu của chúng tôi là thay đổi cơ bản cách các nhà phát triển nghĩ về việc xây dựng ứng dụng, bắt đầu không phải với nền tảng bạn đang nhắm mục tiêu mà là với trải nghiệm bạn muốn tạo. Flutter cho phép bạn tạo ra những trải nghiệm tuyệt đẹp trong đó ...

Jetpack Compose VS SwiftUI !VS Flutter

  Việc phát triển Android đã trở nên dễ dàng hơn khi các bản cập nhật liên tục đến. Sau bản cập nhật 2020.3.1, rất nhiều thứ đã thay đổi. Nhưng thay đổi chính mà tôi nghĩ hầu hết các nhà phát triển phải chờ đợi là Jetpack Compose cho ứng dụng sản xuất. Và Kotlin là lựa chọn duy nhất cho jetpack Compose, cũng là ngôn ngữ được ưu tiên. Để biết thêm chi tiết hoặc các thay đổi trên Jetpack Compose, bạn có thể truy cập vào https://developer.android.com/jetpack/compose Tương tự, IOS Development cũng cung cấp một tùy chọn để phát triển khai báo, SwiftUI. Trong IDE, không có thay đổi nào do điều này. Nhưng khái niệm gần giống với Jetpack Compose. Thay vì bảng phân cảnh, chúng tôi tạo giao diện người dùng bằng Swift. Để biết thêm chi tiết hoặc các thay đổi trên SwiftUI, hãy truy cập https://developer.apple.com/xcode/swiftui/ Hãy xem cách cả hai hoạt động bằng cách sử dụng một dự án demo. Tôi đã lấy một số ví dụ về số lần chạm tương tự của Flutter. 1. Android Jetpack Compose Chúng tôi có thể...