【问题标题】:SearchView crashes with inflation error (androidx) - resource not found exceptionSearchView 因通货膨胀错误 (androidx) 崩溃 - 找不到资源异常
【发布时间】: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.&lt;init&gt;
  • 你能添加你的依赖吗?
  • 崩溃也发生在我的非常罕见的设备上......

标签: android searchview androidx


【解决方案1】:

现在我最终使用了类似这样的东西,而不是 SearchView:

https://github.com/droidparts/droidparts/blob/master/droidparts-misc/src/org/droidparts/widget/ClearableEditText.java

一个简单的EditTextCompoundDrawable 并为这个清晰的图标触摸监听器......

不过,如果有人找到问题的解决方案,请告诉我。

【讨论】:

    【解决方案2】:

    它抱怨:

    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
    

    哪个应该包含在androidx.appcompat 1.0.2 库本身中。

    将该资源直接添加到应用程序的资源中可能会有所帮助;

    连同@drawable/abc_textfield_search_activated_mtrl_alpha

    @drawable/abc_textfield_search_default_mtrl_alpha

    Resources$NotFoundException 可能有各种原因...

    但“个人命运”

    a) view & restrict your app's compatible devices 可以轻松摆脱它们。

    b) 提交issue 可能是另一种选择;如果可能,请提供所述设备详细信息。

    【讨论】:

    • 正如你所说,androidx 应该包含这个资源——所以这个崩溃不应该是独立于设备的吗?此外,似乎没有多少开发人员确实有这个问题,这让我想知道 - 我只有不到 10 万用户并且有不少这样的崩溃......
    • 我在使用 Android 7.1.1 的 Nexus 6(motorola) 时遇到同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多