Android 自定义小部件膨胀异常

Posted

技术标签:

【中文标题】Android 自定义小部件膨胀异常【英文标题】:Android Custom Widget Inflate Exception 【发布时间】:2011-06-29 12:10:00 【问题描述】:

XML

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res/com.org.BatteryManager"
      android:layout_
      android:layout_
      android:orientation="vertical"
      >
    <com.org.BatteryManager.BatteryView
    android:layout_
    android:layout_
    app:textColor="#ffffffff"
    />
    </LinearLayout>

Logcat

02-17 18:49:49.392: WARN/AppWidgetHostView(124): updateAppWidget 找不到任何视图,使用错误视图 02-17 18:49:49.392: WARN/AppWidgetHostView(124): android.view.InflateException: Binary XML file line #9: Error inflating class com.org.BatteryManager.BatteryView 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:407) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:320) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.widget.RemoteViews.apply(RemoteViews.java:930) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:219) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.appwidget.AppWidgetHost.updateAppWidgetView(AppWidgetHost.java:250) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.appwidget.AppWidgetHost$UpdateHandler.handleMessage(AppWidgetHost.java:73) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.os.Handler.dispatchMessage(Handler.java:99) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.os.Looper.loop(Looper.java:123) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.app.ActivityThread.main(ActivityThread.java:4627) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 java.lang.reflect.Method.invokeNative(Native Method) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 java.lang.reflect.Method.invoke(Method.java:521) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): at dalvik.system.NativeStart.main(Native Method) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 由: java.lang.ClassNotFoundException: com.org.BatteryManager.BatteryView 在加载器 dalvik.system.PathClassLoader[.] 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:573) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:532) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.view.LayoutInflater.createView(LayoutInflater.java:466) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 02-17 18:49:49.392: WARN/AppWidgetHostView(124): ... 15 更多

【问题讨论】:

如果有@RemoteViews 标签,请尝试删除它,这对我有用。我绞尽脑汁想办法解决这个问题。 【参考方案1】:

我遇到了同样令人困惑的问题。要修复它,您的自定义视图应该提供一个带有两个参数的构造函数:Context 和 AttributeSet,正如 here 所建议的那样。

【讨论】:

完全搞定了!谢谢! :-D 也是***.com/questions/2098318/…引起的【参考方案2】:

什么是 com.org.BatteryManager.BatteryView?

如果您想使用自定义视图,那么这是可能的。这样做的方法是在 Java 中创建一个自定义视图类,它扩展了一些基本视图组件类。

例如,我在很多应用程序中使用自定义库组件。 Gallery 类只会在滑动时向左或向右移动一帧,这与默认行为不同。

我制作自定义图库的方式是扩展基本的 Gallery 类 --

package com.testing.whatever;

public class CustomGallery extends Gallery 
    //CODE OVERRIDES HERE

然后在我的 XML 代码中,该代码看起来与您已有的相似 --

<com.testing.whatever.CustomGallery android:layout_ android:layout_ />

我怀疑您收到错误是因为您没有编码 com.org.BatteryManager.BatteryView 或者它在您的 java 文件中的错误位置。

【讨论】:

这不适用于应用小部件。应用小部件不能使用自定义类。

以上是关于Android 自定义小部件膨胀异常的主要内容,如果未能解决你的问题,请参考以下文章

在 android studio 中创建自定义小部件?

是否可以在 Android 主屏幕小部件中向 im​​ageView 添加自定义可绘制对象?

如何处理自定义 android 视图/小部件的可见性更改

Android:单击小部件中的按钮时接收自定义广播

将自定义组件小部件动态添加到 Android 中的布局中

膨胀相对布局时出错