在Android的selector状态选择器中,android:state_focused用于标识控件处于聚焦状态时的样式匹配条件,当EditText、Button等可交互控件获取输入焦点或者触摸焦点时,会触发该状态的样式加载。聚焦状态通常用于提示用户当前操作的目标控件,提升交互体验。

android:state_focused基本使用规则
selector中的每个<item>标签代表一种状态对应的样式,android:state_focused的取值为布尔类型,true表示匹配聚焦状态,false表示匹配非聚焦状态。需要注意selector的item匹配顺序是从上到下,第一个匹配到的item会被应用,因此通常把更具体的状态放在前面。
基础selector结构
一个包含聚焦状态的基础selector文件通常放在res/drawable目录下,命名例如selector_edit_bg.xml,基础结构如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 聚焦状态样式 -->
<item android:state_focused="true">
<!-- 聚焦时的样式配置 -->
</item>
<!-- 默认状态样式 -->
<item>
<!-- 非聚焦时的样式配置 -->
</item>
</selector>
常见聚焦状态样式配置示例
1. 修改背景颜色
最常见的需求是控件聚焦时修改背景颜色,比如EditText聚焦时背景变为蓝色,非聚焦时为灰色:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape android:shape="rectangle">
<solid android:color="#FF4081"/>
<corners android:radius="4dp"/>
<stroke android:width="1dp" android:color="#FF4081"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#F5F5F5"/>
<corners android:radius="4dp"/>
<stroke android:width="1dp" android:color="#E0E0E0"/>
</shape>
</item>
</selector>
2. 修改文字颜色
如果需要修改控件聚焦时的文字颜色,可以创建color类型的selector,放在res/color目录下,例如selector_text_color.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="#FF4081"/>
<item android:color="#333333"/>
</selector>
在布局文件中引用时,背景使用drawable的selector,文字颜色使用color的selector:
<EditText
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/selector_edit_bg"
android:textColor="@color/selector_text_color"
android:paddingHorizontal="12dp"
android:hint="请输入内容"/>
注意事项
- 如果同时设置了其他状态比如android:state_pressed(按压状态),需要注意item的排列顺序,避免状态被覆盖。比如按压状态通常比聚焦状态优先级更高,需要放在聚焦状态item的前面。
- 部分控件默认不会获取焦点,比如Button,如果需要Button支持聚焦状态,需要在布局中设置
android:focusable="true"和android:focusableInTouchMode="true"。 - 如果聚焦样式不生效,可以检查selector中是否有其他状态item匹配到了当前控件状态,或者控件的background是否正确引用了selector资源。
多状态组合使用
android:state_focused还可以和其他状态属性组合使用,比如同时匹配聚焦且未按压的状态:
<item android:state_focused="true" android:state_pressed="false">
<shape android:shape="rectangle">
<solid android:color="#4CAF50"/>
</shape>
</item>
这种组合方式可以满足更复杂的交互样式需求,开发者可以根据实际场景灵活配置。
Android_selectorandroid:state_focused聚焦状态样式drawable资源修改时间:2026-07-05 10:36:28