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

如何为Material Toolbar的导航图标设置焦点?

解决Material Toolbar整体高亮、仅需导航图标获焦点的问题

1. 先禁用Toolbar自身的焦点能力

默认情况下Material Toolbar会作为可聚焦容器,进入页面时自动抢占焦点导致整体高亮。先把它的焦点能力关掉:

  • XML布局方式:
<com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/toolbar"
    ...
    android:focusable="false"
    android:focusableInTouchMode="false" />
  • 代码方式:
toolbar.isFocusable = false
toolbar.isFocusableInTouchMode = false

2. 开启导航图标的焦点并主动请求

导航图标默认可能未开启可聚焦属性,需要先配置,再在页面进入前台时主动请求焦点:

// 获取导航图标对应的View
val navIconView = toolbar.findViewById<View>(R.id.navigationIcon)
// 开启焦点属性
navIconView.isFocusable = true
navIconView.isFocusableInTouchMode = true

// 在页面进入前台时请求焦点,比如onResume或onViewCreated中
override fun onResume() {
    super.onResume()
    navIconView.requestFocus()
}

如果找不到R.id.navigationIcon,可以尝试给自定义导航图标设置id后查找,或通过反射获取Toolbar内部的导航图标视图。

3. 兜底:拦截Toolbar的焦点分发

如果上述方法仍无效,可以通过拦截Toolbar的焦点变化,强制把焦点转移到导航图标:

toolbar.setOnFocusChangeListener { _, hasFocus ->
    if (hasFocus) {
        navIconView.requestFocus()
    }
}

另外检查页面内其他可聚焦视图(如EditText)是否抢占了焦点,必要时调整焦点优先级,确保导航图标是页面中第一个可获取焦点的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:47:03