4. 使用WearableRecyclerView展示列表
WearableRecyclerView 列表实现要点
WearableRecyclerView 是 Wear OS 上用于展示可滚动列表的专用控件,继承自 RecyclerView,但额外提供了针对圆形表盘的弯曲布局(Curved Layout)和边缘留白(Edge Inset)能力。本节实现一个展示通知条目的列表,每个条目包含图标、标题和摘要。
布局与弯曲配置
在 XML 布局中声明 WearableRecyclerView,并设置 app:bezelWidth 控制列表内容距屏幕边缘的留白,避免圆形表盘裁切首尾条目。弯曲布局通过 setCircularScrollingGestureEnabled(true) 启用旋转表冠/触摸滑动,并调用 setEdgeItemsCenteringEnabled(true) 让首尾条目向屏幕中心对齐。
Adapter 与数据模型
定义通知条目数据类,包含图标资源、标题和摘要文本。Adapter 继承 RecyclerView.Adapter,在 onCreateViewHolder 中加载条目布局,在 onBindViewHolder 中绑定数据。
data class NotificationItem(
val iconRes: Int,
val title: String,
val summary: String
)
class NotificationAdapter(
private val items: List<NotificationItem>
) : RecyclerView.Adapter<NotificationAdapter.VH>() {
class VH(view: View) : RecyclerView.ViewHolder(view) {
val icon: ImageView = view.findViewById(R.id.item_icon)
val title: TextView = view.findViewById(R.id.item_title)
val summary: TextView = view.findViewById(R.id.item_summary)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_notification, parent, false)
return VH(view)
}
override fun onBindViewHolder(holder: VH, position: Int) {
val item = items[position]
holder.icon.setImageResource(item.iconRes)
holder.title.text = item.title
holder.summary.text = item.summary
}
override fun getItemCount() = items.size
}
Activity 中配置弯曲布局
在 Activity 中获取 WearableRecyclerView 实例,设置布局管理器为 WearableLinearLayoutManager,并启用弯曲滚动与边缘居中。示例数据模拟四条通知条目。
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<WearableRecyclerView>(R.id.recycler_view)
// 弯曲布局管理器
recyclerView.layoutManager = WearableLinearLayoutManager(this)
// 启用旋转表冠/触摸弯曲滚动
recyclerView.setCircularScrollingGestureEnabled(true)
recyclerView.setBezelWidth(16f)
// 首尾条目向屏幕中心对齐
recyclerView.setEdgeItemsCenteringEnabled(true)
// 示例通知数据
val items = listOf(
NotificationItem(R.drawable.ic_msg, "消息", "张三:下午三点开会"),
NotificationItem(R.drawable.ic_mail, "邮件", "项目周报已更新"),
NotificationItem(R.drawable.ic_cal, "日历", "15:00 团队同步"),
NotificationItem(R.drawable.ic_fit, "健康", "今日步数 8200")
)
recyclerView.adapter = NotificationAdapter(items)
}
}
条目布局与验证
条目布局使用水平 LinearLayout,左侧图标 24dp,右侧垂直排列标题与摘要。运行后应能在圆形表盘上看到四条通知条目,首尾条目向中心对齐,旋转表冠或上下滑动时列表沿弧线滚动,边缘留白确保内容不被圆形边框裁切。
若列表在方形表盘上显示,弯曲效果自动退化为普通垂直滚动,bezelWidth 仍保留左右留白,保证两种屏幕形态下均可正常使用。