+29

Jetpack Compose 1.8 Có Gì Mới?

✅ Cập nhật nhanh

Tính năng Trạng thái
Autofill 🆕 Mới
Text: AutoSize & Ellipsis 🆕 Mới
Annotated HTML Lists 🆕 Mới
onLayoutRectChanged 🆕 Mới
animateBounds 🆕 Mới
Stabilized APIs 🔒 Đã ổn định
Deprecation: ContextualFlowRow/Column ⚠️ Bị loại bỏ
Core fixes & Accessibility ✅ Cải thiện

✍️ Autofill: Tự động điền trong Compose

Dễ dàng tích hợp autofill vào TextField:

TextField(
  state = rememberTextFieldState(),
  modifier = Modifier.semantics {
    contentType = ContentType.Username
  }
)

✳️ Ghi dữ liệu:

  • Tự động: khi người dùng điều hướng khỏi màn hình.
  • Thủ công: gọi commit() từ AutofillManager.

📄 Xem thêm: Autofill in Compose Documentation


🆕 Text Enhancements

📏 Tự động co giãn chữ với autoSize

BasicText(
    text = "Hello World",
    maxLines = 1,
    autoSize = TextAutoSize.StepBased()
)

**************

🔠 Ellipsis mới:

Hiển thị dấu ba chấm ở đầu hoặc giữa dòng:

Text(text, maxLines = 1, overflow = TextOverflow.StartEllipsis)
Text(text, maxLines = 1, overflow = TextOverflow.MiddleEllipsis)

image.png

📝 Hỗ trợ HTML nâng cao:

Giờ đây có thể hiển thị unordered list (bullet list):

Text(
  AnnotatedString.fromHtml(
    """
    <ul>
      <li>Hello</li>
      <li>World</li>
    </ul>
    """
  )
)

image.png


👁️‍🗨️ Theo dõi hiển thị với onLayoutRectChanged

Thay thế nhẹ nhàng cho onGloballyPositioned – ít tốn tài nguyên, cho phép debounce/throttle:

Modifier.onLayoutRectChanged { rect -> 
  // Gọi khi kích thước/hiển thị thay đổi
}

🔜 Compose 1.9 sẽ cung cấp API cấp cao hơn để theo dõi composable trên màn hình.


🌀 Animation mới với animateBounds

Dễ dàng tự động animate vị trí và kích thước khi thay đổi bên trong LookaheadScope:

Box(
  Modifier
    .animateBounds(lookaheadScope = this@LookaheadScope)
)

animatebounds.gif

🎥 Tương tự như "shared element transition" nhưng đơn giản hơn.


🔒 Ổn định API: giảm từ 172 xuống 70

Google đã giảm số lượng API gắn nhãn @Experimental trong Compose UI/Foundation 1.8 → tăng sự ổn định cho nhà phát triển.


⚠️ Deprecation: ContextualFlowRow / Column

Các API ContextualFlowRowContextualFlowColumn đã bị deprecated do thiếu tối ưu:

👉 Khuyến nghị: copy mã nguồn cũ nếu vẫn cần sử dụng.

Trong khi đó:

  • FlowRowFlowColumn đã ổn định
  • ❌ Tham số overflow của Flow APIs cũng đã bị loại bỏ

🔧 Cải tiến khác

  • Accessibility checks trong test: dùng enableAccessibilityChecks
  • 🖼️ Dialogs full screen: giờ đây sẽ vẽ ra sau hệ thống bars
  • 🔍 ClickableText testing: dễ test link với performFirstLinkClick()
  • 🌀 Custom overscroll: hỗ trợ truyền OverscrollEffect vào list

🛠️ Cách nâng cấp

Sử dụng BOM mới:

implementation(platform("androidx.compose:compose-bom:2025.04.01"))

⚠️ Nếu không dùng BOM, hãy nâng foundationui cùng lúc để tránh lỗi autofill.


📣 Lời kết

Google tiếp tục cải thiện Compose qua phản hồi từ cộng đồng.
Hãy tiếp tục gửi báo cáo lỗi & yêu cầu tính năng qua issue tracker.

🎉 Happy Composing!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí