Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”

时间:2023-01-29 20:34:26

今天写程序发现一个问题,就是XML中报出android.view.InflateException异常,可能的原因有:

1.XML中使用到得组件名称是否书写正确(包名+类名),可以使用crtl+鼠标点击看能不能跳转到该组件的定义的地方,可以的话就不是这个问题,如果不可以的话,就是这个问题

2.抛出异常时的main.xml与自定义View类相关代码如下:就是自定义的组件中的构造方法有没有书写正确

main.xml

Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”

继承View的类Chessboard.java:

Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”

对于此异常,如下进行修改:添加View类的另一个构造方法

Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”

3.这个问题很是蛋疼,也是我遇到的问题,搞了我一天的时间,就是工程的编码问题,场景是:从github上下载一个开源组件demo,导入到本地的Eclispe中,就是报错,开始因为是上述的两个问题,但是最后发现都不是,然后又以为是Eclipse版本或者是SDK,ADT这样的版本的问题,耗费了我好长时间,最后想起来github上的这些开源都是老外们写的东东,肯定用的是UTF-8编码的,但是我本地Eclipse的编码是GBK,所以我立马改了一下编码,终于解决了,所以在这里深深的体会到,在使用Eclipse导入工程的时候,还用注意编码的问题,切记!

4.这个问题也是不难发现的,不会经常遇到,就是在多屏适配的时候,比如你在values-sw720文件夹中定义了dimens的一个尺寸,但是没有在values中定义相应的尺寸大小,然后在xml中使用了这个dimens尺寸,当你运行程序到720p(三星平板)的设备上是没有问题的,如果将程序跑在480的设备上,就会出现这种异常(原因是480设备可能会从values文件夹中查找尺寸,找不到出错),这个问题很难发现。所以我们在做屏幕适配工作的时候,一定要谨慎。

5.

重写Android默认Button按钮引发异常:

Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class com.example.activity1.TestButton

自定义控件的代码如下,只是简单重写onTouchEvent方法,一直没办法正常使用。

[java] view plain copy print?Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
  1. public class TestButton extends Button {  
  2.   
  3.     public TestButton(Context context) {  
  4.         super(context);  
  5.         // TODO Auto-generated constructor stub  
  6.     }  
  7.       
  8.     @Override  
  9.     public boolean onTouchEvent(MotionEvent event) {  
  10.   
  11.         boolean value = super.onTouchEvent(event);  
  12.         System.out.println("super.onTouchEvent: " + value);  
  13.         return value;  
  14.     }  
  15. }  

报出异常的原因是由于少添加了个一个构造方法,参数为(Context, AttributeSet),其中第二个参数用来将xml文件中的属性初始化。

自定义控件若需要在xml文件中使用,就必须重写带如上两个参数的构造方法。添加后即可正常使用了。

[java] view plain copy print?Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
  1. public TestButton(Context context, AttributeSet attributeSet) {  
  2.     super(context, attributeSet);  
  3.     // TODO Auto-generated constructor stub  
  4. }