You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wear OS表盘应用:如何为偏好设置页面请求焦点以启用旋转输入?

Wear OS 偏好设置页面启用旋转表圈输入的焦点处理方案

要让基于PreferenceFragment的PreferenceScreen支持手表旋钮/旋转表圈输入,核心是确保页面内承载偏好项的RecyclerView获得焦点。具体实现步骤如下:

  1. 在PreferenceFragment的onViewCreated方法中,找到内部的RecyclerView(系统默认ID为android.R.id.list)。
  2. 配置该RecyclerView可获取焦点,并在视图布局完成后请求焦点。

Kotlin 实现代码

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val preferenceRecyclerView = view.findViewById<RecyclerView>(android.R.id.list)
    preferenceRecyclerView?.apply {
        isFocusable = true
        isFocusableInTouchMode = true
        // 延迟到视图布局完成后请求焦点,避免无效调用
        post { requestFocus() }
    }
}

Java 实现代码

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    RecyclerView preferenceRecyclerView = view.findViewById(android.R.id.list);
    if (preferenceRecyclerView != null) {
        preferenceRecyclerView.setFocusable(true);
        preferenceRecyclerView.setFocusableInTouchMode(true);
        preferenceRecyclerView.post(() -> preferenceRecyclerView.requestFocus());
    }
}

关键说明

  • Wear OS的旋转表圈输入仅对当前获取焦点的可滚动视图生效,而PreferenceFragment的RecyclerView默认不会自动请求焦点,导致旋转操作无响应。
  • 使用post方法请求焦点是为了确保视图已经完成布局初始化,避免因视图未就绪导致焦点请求失败。
  • 如果存在自定义Preference组件,需确保这些组件不会抢占RecyclerView的焦点,否则旋转输入仍可能失效。

内容的提问来源于stack exchange,提问作者go3d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:10:19