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

本文介绍了在Android编程时遇到'android.view.InflateException: Binary XML file line # : Error inflating class'异常的常见原因及解决办法。包括检查组件名称的正确性,自定义View构造方法的编写,工程编码问题(如GBK与UTF-8的冲突),多屏适配中尺寸定义的遗漏,以及重写Button时构造方法的缺失。提供了解决这些问题的具体步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写程序发现一个问题,就是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方法,一直没办法正常使用。

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  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 ? 在CODE上查看代码片 派生到我的代码片
  1. public TestButton(Context context, AttributeSet attributeSet) {  
  2.     super(context, attributeSet);  
  3.     // TODO Auto-generated constructor stub  
  4. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值