4. 使用WearableRecyclerView展示列表

使用WearableRecyclerView展示列表 学习卡片

WearableRecyclerView 列表实现要点

WearableRecyclerView 是 Wear OS 上用于展示可滚动列表的专用控件,继承自 RecyclerView,但额外提供了针对圆形表盘的弯曲布局(Curved Layout)和边缘留白(Edge Inset)能力。本节实现一个展示通知条目的列表,每个条目包含图标、标题和摘要。

布局与弯曲配置

在 XML 布局中声明 WearableRecyclerView,并设置 app:bezelWidth 控制列表内容距屏幕边缘的留白,避免圆形表盘裁切首尾条目。弯曲布局通过 setCircularScrollingGestureEnabled(true) 启用旋转表冠/触摸滑动,并调用 setEdgeItemsCenteringEnabled(true) 让首尾条目向屏幕中心对齐。

WearableRecyclerView 圆形表盘布局与弯曲滚动 bezelWidth 留白区 通知条目 1 通知条目 2 通知条目 3 通知条目 4 弯曲滚动 关键配置 app:bezelWidth="16dp" 圆形表盘边缘留白,防裁切 setCircularScrollingGestureEnabled 启用弯曲手势滚动 setEdgeItemsCenteringEnabled 首尾条目向中心对齐 setLayoutManager WearableLinearLayoutManager 数据源 List<NotificationItem> → Adapter → WearableRecyclerView 弯曲渲染

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 仍保留左右留白,保证两种屏幕形态下均可正常使用。