今天写程序发现一个问题,就是XML中报出android.view.InflateException异常,可能的原因有:
1.XML中使用到得组件名称是否书写正确(包名+类名),可以使用crtl+鼠标点击看能不能跳转到该组件的定义的地方,可以的话就不是这个问题,如果不可以的话,就是这个问题
2.抛出异常时的main.xml与自定义View类相关代码如下:就是自定义的组件中的构造方法有没有书写正确
main.xml
继承View的类Chessboard.java:
对于此异常,如下进行修改:添加View类的另一个构造方法
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方法,一直没办法正常使用。
报出异常的原因是由于少添加了个一个构造方法,参数为(Context, AttributeSet),其中第二个参数用来将xml文件中的属性初始化。
自定义控件若需要在xml文件中使用,就必须重写带如上两个参数的构造方法。添加后即可正常使用了。