Material3 SearchBar组件XML膨胀异常,请求问题排查帮助
我正在尝试实现Material3中的新SearchBar组件,参考官方文档进行开发,运行应用时出现Inflate崩溃,以下是相关代码与报错信息:
XML布局代码
androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:focusableInTouchMode="true"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/appbar" style="@style/Widget.MaterialComponents.AppBarLayout.Surface" android:layout_width="match_parent" android:layout_height="wrap_content" app:elevation="0dp"> <com.google.android.material.search.SearchBar android:id="@+id/scheme_search_bar" android:layout_width="match_parent" android:layout_height="wrap_content" app:navigationIcon="@drawable/ic_back" app:forceDefaultNavigationOnClickListener="true" android:minHeight="48dp" /> </com.google.android.material.appbar.AppBarLayout> <com.google.android.material.search.SearchView android:layout_width="match_parent" android:layout_height="match_parent" android:hint="Введите схему" app:layout_anchor="@id/scheme_search_bar"> <!-- 搜索结果展示区域 --> <androidx.recyclerview.widget.RecyclerView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </com.google.android.material.search.SearchView> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!-- 主页面内容RecyclerView --> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
Fragment中的ViewBinding代码
private val binding by lazy(LazyThreadSafetyMode.NONE) { FragmentWaterBinding.inflate(layoutInflater) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) = binding.root
崩溃报错信息
android.view.InflateException: Binary XML file line #80 in example/my_fragment: Binary XML file line #80 in example/my_fragment: Error inflating class com.google.android.material.search.SearchBar
Caused by: android.view.InflateException: Binary XML file line #80 in example/my_fragment: Error inflating class com.google.android.material.search.SearchBar
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:881)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1033)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:988)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1150)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1111)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1153)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1111)
at android.view.LayoutInflater.inflate(LayoutInflater.java:709)
at android.view.LayoutInflater.inflate(LayoutInflater.java:547)
当前使用的Material依赖
implementation "com.google.android.material:material:1.9.0-alpha01"
排查方向与解决方案
主题兼容性检查
Material3组件要求应用主题继承自Theme.Material3.*系列主题,而非旧的Theme.MaterialComponents.*。若使用Material2主题,会导致SearchBar无法正常Inflate。修改styles.xml主题:<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar"> <!-- 自定义主题属性 --> </style>验证navigationIcon资源
InvocationTargetException可能源于@drawable/ic_back资源不存在或格式错误,确认该资源在项目中存在且为有效矢量图/位图。升级Material依赖版本
1.9.0-alpha01为测试版,存在潜在bug。建议升级至最新稳定版:implementation "com.google.android.material:material:1.11.0"检查组件引用正确性
确认XML中com.google.android.material.search.SearchBar和SearchView的类路径拼写无误,是Material3的正确组件。清理重建项目
执行Build -> Clean Project和Build -> Rebuild Project,清除gradle缓存后重新构建,排除缓存导致的资源加载异常。
内容的提问来源于stack exchange,提问作者SoulReaver313

