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

Android SearchView设置selector背景 焦点状态下背景色不生效问题

问题根因

两个配置错误导致效果不生效:

  1. 你在SearchView根控件上设置的android:background会被其内部承载输入功能的AppCompatAutoCompleteTextView控件自带的默认背景覆盖,背景根本不会作用到实际的输入区域。
  2. 状态选择器监听的状态错误:点击SearchView进入输入状态时,触发的是控件的state_focused聚焦状态,你写的state_selected、state_pressed都不会在输入聚焦时触发,自然匹配不到红色背景。
修复步骤

1. 修正状态选择器

修改search_edit_text_rounded_corner.xml,将监听状态替换为聚焦状态:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/search_edit_text_selected" android:state_focused="true" />
    <item android:drawable="@drawable/search_edit_text_default" />
</selector>

2. 将背景设置到SearchView内部的输入控件上

两种实现方式二选一即可:

  • 代码设置(兼容性最好)
    在初始化SearchView的代码中加入以下逻辑,直接给内部输入框设置背景:
val searchEt = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
searchEt.setBackgroundResource(R.drawable.search_edit_text_rounded_corner)
// 可根据设计稿调整内边距,避免文字贴边
searchEt.setPadding(24, 12, 24, 12)

Java版本代码:

EditText searchEt = searchView.findViewById(androidx.appcompat.R.id.search_src_text);
searchEt.setBackgroundResource(R.drawable.search_edit_text_rounded_corner);
searchEt.setPadding(24, 12, 24, 12);
  • 主题样式配置(无需写代码)
    修改现有SearchViewTheme,给内部输入框单独指定样式:
<style name="SearchViewTheme" parent="Widget.AppCompat.SearchView">
    <item name="android:textColorHint">@color/hint</item>
    <item name="android:editTextColor">@color/grey</item>
    <item name="android:fontFamily">@font/source_sans_pro_light</item>
    <item name="android:textSize">@dimen/text_size</item>
    <item name="queryHint">@string/edit_text_hint</item>
    <item name="iconifiedByDefault">false</item>
    <!-- 新增配置指定输入框样式 -->
    <item name="searchEditTextStyle">@style/SearchEditStyle</item>
</style>

<style name="SearchEditStyle">
    <item name="android:background">@drawable/search_edit_text_rounded_corner</item>
    <item name="android:paddingVertical">12dp</item>
    <item name="android:paddingHorizontal">24dp</item>
</style>

3. 清理冗余配置

删除布局文件中SearchView根节点上的android:background="@drawable/search_edit_text_rounded_corner"属性,避免根布局产生多余绘制。

修改完成后重新编译运行即可实现预期效果:未聚焦时显示默认浅色圆角背景,点击唤起输入、控件获取焦点时自动切换为红色填充红边框的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:36:32