【问题标题】:Crash when using ConstraintLayout in Notification在通知中使用 ConstraintLayout 时崩溃
【发布时间】:2019-03-14 17:57:54
【问题描述】:

当我在自定义Notification 中使用ConstraintLayout 时,我得到一个InflationException。我可以在我的应用程序的其他地方使用它们,而不是在 Notification 的自定义布局中。我假设支持库中包含的任何小部件都不能在RemoteView 中使用,但我找不到任何确认。有人知道吗?

E/StatusBar: couldn't inflate view for notification com.example.app/0x1
android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.constraint.ConstraintLayout" on path: DexPathList[[],nativeLibraryDirectories=[/system/priv-app/TeleService/lib/arm64, /system/fake-libs64, /system/priv-app/TeleService/TeleService.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64, /system/lib64, /vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.view.LayoutInflater.createView(LayoutInflater.java:606)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.widget.RemoteViews.inflateView(RemoteViews.java:3278)
    at android.widget.RemoteViews.-wrap1(Unknown Source:0)
    at android.widget.RemoteViews$AsyncApplyTask.doInBackground(RemoteViews.java:3380)
    at android.widget.RemoteViews$AsyncApplyTask.doInBackground(RemoteViews.java:3376)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 9732
android.app.RemoteServiceException: Bad notification posted from package com.example.app: Couldn't inflate contentViewsandroid.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1775)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

【问题讨论】:

    标签: java android android-notifications android-constraintlayout


    【解决方案1】:

    RemoteViews 对象(以及相应的 App Widget)可以支持 以下布局类

    • FrameLayout
    • LinearLayout
    • RelativeLayout
    • GridLayout

    还有以下小部件类:

    • AnalogClock
    • Button
    • Chronometer
    • ImageButton
    • ImageView
    • ProgressBar
    • TextView
    • ViewFlipper
    • ListView
    • GridView
    • StackView
    • AdapterViewFlipper

    不支持这些类的后代。

    阅读更多: https://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout

    【讨论】:

    • 这令人失望。如果我们可以使用一些支持库视图,那就太好了……
    【解决方案2】:

    RemoteView 只能支持以下布局类:

    FrameLayout

    LinearLayout

    RelativeLayout

    GridLayout

    如上所述here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多