如何设置Android中selector item的聚焦状态样式?
- 内容介绍
- 相关推荐
本文共计992个文字,预计阅读时间需要4分钟。
在Android中,大多数情况下,不是由于写法错误而导致触摸屏点击无效,而是因为+android:state_focused+ 没有被触发。这是因为Android默认只对可聚焦(focusable)且启用(enabled)的+View+ 响应键盘/方向键导航带来的焦点变化。
触摸屏点击默认不触发+state_focused+,除非+View+ 明确设置了+android:focusable+ 属性。
-
android:focusable="true"是基础,但仅支持 D-pad、TV 遥控或键盘导航 - 想让触摸点击也进
state_focused,必须加android:focusableInTouchMode="true" - 如果父布局拦截了焦点(比如
ScrollView或RecyclerView),子 View 即使设了也不一定拿到焦点 - 某些系统版本(如 Android 12+)对触摸模式下焦点行为更严格,
focusableInTouchMode可能被忽略,优先考虑state_pressed或state_selected
selector 中 state_focused 和 state_pressed 同时存在时谁优先
没有“优先级”一说,是状态叠加匹配。
本文共计992个文字,预计阅读时间需要4分钟。
在Android中,大多数情况下,不是由于写法错误而导致触摸屏点击无效,而是因为+android:state_focused+ 没有被触发。这是因为Android默认只对可聚焦(focusable)且启用(enabled)的+View+ 响应键盘/方向键导航带来的焦点变化。
触摸屏点击默认不触发+state_focused+,除非+View+ 明确设置了+android:focusable+ 属性。
-
android:focusable="true"是基础,但仅支持 D-pad、TV 遥控或键盘导航 - 想让触摸点击也进
state_focused,必须加android:focusableInTouchMode="true" - 如果父布局拦截了焦点(比如
ScrollView或RecyclerView),子 View 即使设了也不一定拿到焦点 - 某些系统版本(如 Android 12+)对触摸模式下焦点行为更严格,
focusableInTouchMode可能被忽略,优先考虑state_pressed或state_selected
selector 中 state_focused 和 state_pressed 同时存在时谁优先
没有“优先级”一说,是状态叠加匹配。

