Bạn có thể cải thiện hơn nữa trải nghiệm với thẻ thông tin bằng cách tạo ra khả năng tương tác cho thẻ thông tin. Bằng cách thêm đối tượng sửa đổi Clickable
vào một phần tử bố cục trong thẻ thông tin, bạn có thể tương tác với người dùng nhấn vào phần tử bố cục đó.
Trang này liệt kê một số thao tác thường dùng mà người dùng thực hiện trong các thẻ thông tin tương tác, cùng với hướng dẫn về cách triển khai hành vi này trong các thẻ thông tin của ứng dụng.
Tải một bố cục mới cho thẻ thông tin
Sử dụng LoadAction
để làm mới bố cục của thẻ thông tin khi người dùng nhấn vào một phần tử tương tác.
Trong đoạn mã sau, mã nhận dạng có thể nhấp được đặt trong setId()
được chuyển cùng với lệnh gọi onTileRequest()
, nên bạn có thể hiển thị một bố cục khác theo mã nhận dạng này:
override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture(
Tile.Builder()
.setResourcesVersion("1")
.setTileTimeline(Timeline.fromLayoutElement(
when(requestParams.currentState.lastClickableId) {
"foo" -> myFooLayout()
else -> myOtherLayout()
}
)).build()
)
Cập nhật trạng thái trong thẻ thông tin
Nếu một phần tử tương tác trong thẻ thông tin của bạn có nhiều trạng thái, hãy sử dụng LoadAction
để hiển thị giá trị mới của phần tử đó. Trong đoạn mã sau đây, thẻ thông tin cho thấy giá trị đã cập nhật của một hộp đánh dấu:
private fun checkboxChip(
checkboxValue: Boolean,
deviceParameters: DeviceParametersBuilders.DeviceParameters
): Chip =
Chip.Builder(
context,
Clickable.Builder()
.setOnClick(LoadAction.Builder()
.build()
).build(),
deviceParameters
).setIconContent(if (checkboxValue) "check" else "checkoff")
// Set checkbox labels and colors here.
.build()
Yêu cầu làm mới nội dung của thẻ thông tin
Để yêu cầu cập nhật toàn bộ nội dung của thẻ thông tin, hãy sử dụng LoadAction
và cập nhật trạng thái yêu cầu của thẻ thông tin như trong đoạn mã sau.
private fun tappableElement(): LayoutElement =
Button.Builder(this, Clickable.Builder()
.setId("foo")
.setOnClick(LoadAction.Builder()
.setRequestState(
StateBuilders.State.Builder()
/* Update state information here. */
.build()
).build()
).build())
.setTextContent("Tap me!")
.build()
Tải một hoạt động bằng đường liên kết sâu
Để tải một hoạt động bằng một đường liên kết sâu, hãy liên kết một phần tử có thể nhấp với đối tượng LoadAction
:
private fun tappableElement(): LayoutElement =
Text.Builder()
.setText("Tap me!")
.setModifiers(Modifiers.Builder()
.setClickable(Clickable.Builder()
.setId("foo")
.setOnClick(LoadAction.Builder().build())
.build()
).build()
).build()
Sau đó, trong phương thức onTileRequest()
, hãy dùng đối tượng TaskStackBuilder
làm đối tượng trợ giúp:
override fun onTileRequest(requestParams: TileRequest): ListenableFuture<TileBuilders.Tile> {
val lastClickableId = requestParams.currentState.lastClickableId
if (lastClickableId == "foo") {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(Intent(
Intent.ACTION_VIEW,
"https://www.example.com/$lastClickableId".toUri(),
context,
MyWearOsAppActivity::class.java
))
.startActivities()
}
// The user clicked somewhere else on the tile instead.
}
Tải một hoạt động đã xuất
Để tải một hoạt động đã xuất theo tên lớp và bằng ý định bổ sung, hãy sử dụng LaunchAction
.
private fun tappableElement(): LayoutElement =
Text.Builder(this, "Tap me!")
.setModifiers(Modifiers.Builder()
.setClickable(Clickable.Builder()
.setId("foo")
.setOnClick(ActionBuilders.launchAction(
ComponentName("my.package.name", "MyActivity")
)).build()
).build()
).build()
Bên trong hoạt động đã khởi chạy, bạn có thể truy xuất mã nhận dạng dùng cho thẻ thông tin, như trong ví dụ sau:
class MyActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val clickableId =
intent.getStringExtra(TileService.EXTRA_CLICKABLE_ID)
// clickableId will be "foo" when launched from the Tile
}
}
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Tạo Thẻ thông tin đầu tiên trong Wear OS
- Di chuyển sang không gian tên ProtoLayout
- Hiện nội dung cập nhật động trong thẻ thông tin