【发布时间】:2019-07-27 19:53:02
【问题描述】:
我的其中一个布局中有一个SearchView,并在一些 设备上附加了崩溃。问题是找不到abc_textfield_search_material 资源。但我没有直接使用这个资源,因为我的 xml 布局看起来像下面这样:
<androidx.appcompat.widget.SearchView
android:id="@+id/svSearch"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="@string/filter"
app:iconifiedByDefault="false"
android:paddingBottom="4dp"
app:queryHint="@string/filter" />
任何想法如何解决这个问题?此崩溃仅发生在稀有设备上(少于 1%),大多数设备都可以正常工作。我已经在考虑将其更改为带有复合可绘制对象的TextView,但也许有比避免使用SearchView更好的解决方案
堆栈跟踪
java.lang.RuntimeException: Unable to pause activity {com.my.app/com.my.app.MainActivity}: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4071)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4026)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3978)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1818)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6744)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
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:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
...
Caused by: android.content.res.Resources$NotFoundException: Drawable com.my.app:drawable/abc_textfield_search_material with resource ID #0x7f080058
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_textfield_search_material.xml from drawable resource ID #0x7f080058
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:847)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631)
at android.content.res.Resources.getDrawableForDensity(Resources.java:888)
at android.content.res.Resources.getDrawable(Resources.java:827)
at android.content.Context.getDrawable(Context.java:635)
at androidx.core.content.ContextCompat.a(ContextCompat.java:463)
at androidx.appcompat.widget.AppCompatDrawableManager.a(AppCompatDrawableManager.java:203)
at androidx.appcompat.widget.AppCompatDrawableManager.a(AppCompatDrawableManager.java:191)
at androidx.appcompat.content.res.AppCompatResources.b(AppCompatResources.java:102)
at androidx.appcompat.widget.TintTypedArray.a(TintTypedArray.java:76)
at androidx.appcompat.widget.SearchView.<init>(SearchView.java:298)
at androidx.appcompat.widget.SearchView.<init>(SearchView.java:270)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
...
主题
我在我的应用中使用 android x 主题 - Theme.MaterialComponents.NoActionBar.Bridge
受影响的设计(我知道)
- 一加 7 Pro(GM1913、GM1915、GM1917)
- 三星 S9+ 韩国 (SM-G965N)
【问题讨论】:
-
如果你使用androidx,你也应该使用相应的材质主题。
-
所以你没有在活动的任何地方使用
abc_textfield_search_material? -
我目前使用桥接主题是因为我使用了一个库 (
Theme.MaterialComponents.NoActionBar.Bridge),这也应该没问题,不是吗?它适用于大多数设备。而且我不直接在任何地方使用abc_textfield_search_material,它是在SearchView内部通货膨胀中访问的(它来自SearchView.<init>) -
你能添加你的依赖吗?
-
崩溃也发生在我的非常罕见的设备上......
标签: android searchview androidx