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

Dialog中加载SearchView触发InflateException错误求助

Android Dialog中加载自定义样式SearchView崩溃问题解决

问题原因

崩溃根源是abc_search_view布局中的ImageView无法解析属性索引13,本质是Dialog的Context主题缺少SearchView内部控件所需的AppCompat主题属性,具体触发场景:

  • 自定义SearchView样式WallSearchView仅继承控件样式Widget.AppCompat.Light.SearchView,未关联完整的AppCompat主题上下文,导致内部ImageView的drawable属性无法解析
  • 创建Dialog时使用了Application Context而非Activity的Context,Application Context默认不携带Activity级别的主题属性
  • 样式中混用android:命名空间和AppCompat属性,部分系统属性未被正确映射

解决方案

方案1:修正SearchView样式的继承与属性

将样式改为继承主题Overlay,并补充核心控件样式引用,确保主题上下文完整:

<style name="WallSearchView" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorControlActivated">@color/light_black</item>
    <item name="hintTextColor">@color/gray</item>
    <item name="android:textSize">@dimen/_12sdp</item>
    <item name="android:fontFamily">@font/inter_medium</item>
    <item name="android:cursorVisible">true</item>
    <item name="android:textCursorDrawable">@null</item>
    <!-- 关联SearchView核心控件样式 -->
    <item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item>
</style>

同时将布局中SearchView的android:theme改为app:theme(AppCompat官方推荐用法):

<androidx.appcompat.widget.SearchView
    android:id="@+id/searchView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerVertical="true"
    android:focusable="true"
    android:paddingHorizontal="@dimen/_8sdp"
    android:iconifiedByDefault="false"
    android:singleLine="true"
    app:theme="@style/WallSearchView"
    app:queryHint="Search for country"
    app:searchHintIcon="@null" />

方案2:确保Dialog使用Activity Context

创建Dialog时必须传入当前Activity的Context,禁止使用Application Context:

// 错误写法
// val dialog = Dialog(applicationContext)
// 正确写法
val dialog = Dialog(this@AddOrdersActivity)
dialog.setContentView(R.layout.common_list_layout)

方案3:替换为Material Components SearchView

如果项目已依赖Material库,直接使用官方推荐的Material SearchView,避免AppCompat主题兼容问题:

<style name="WallSearchView" parent="Widget.MaterialComponents.SearchView">
    <item name="hintTextColor">@color/gray</item>
    <item name="android:textSize">@dimen/_12sdp</item>
    <item name="android:fontFamily">@font/inter_medium</item>
</style>

布局中替换控件:

<com.google.android.material.search.SearchView
    android:id="@+id/searchView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:theme="@style/WallSearchView"
    app:queryHint="Search for country" />

方案4:清理冲突依赖

移除项目中重复、版本冲突的依赖(如同时引入retrofit1/2、okhttp2/3),确保appcompat与material版本匹配:

// 保留稳定兼容的依赖版本
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
// 删除重复依赖:com.squareup.retrofit:retrofit:1.9.0、com.squareup.okhttp:okhttp:2.7.5等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:47:01