========= 5.0     android异常“android.view.InflateException: Binary XML file line # : Error inflating class”

今天用到viewPager写了个小demo测试FragmentStatePagerAdapter和FragmentPagerAdapter的区别,忽然报出了“android.view.InflateException: Binary XML file line # : Error inflating class”错误,一时不知道如何下手,网上搜的解决法案都没办法行得通,最后不经意间调通了,现将解决法案说下:

1.看下ViewPager包名是否写全了,如果没有可能出现上面的错误。

2.如果是从网上下载下来的项目添加到工程中出现以上错误,在工程上右键选properties->android->library中删掉所要添加的库文件如:appcompat_v7,然后重新运行。如果可以运行之后再将这个库给添加进去,具体原因不是很清楚。

以上是我的解决方法,我在网上也看到不少其他原因引起的,现在总结下,以后出现类似情况可以直接处理了:

1.自定义类引用为题:如写一个自定义view,引用的时候需要用完整路径。

2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数

View(Context context)     //Simple constructor to use when creating a view from code

View(Context context, AttributeSet attrs)     //Constructor that is called when inflating a view from XML

View(Context context, AttributeSet attrs, int defStyle)     //Perform inflation from XML and apply a class-specific base style

从文档上的介绍来看,第二个和第三个构造函数对于XML这种引用方式是必须实现的,这三个构造函数应该是在不同的应用场合来实例化一个View对象。

3.找不到资源文件: 系统会根据分辨率来选择加载不同drawable下文件夹的资源,如果只在一个文件下放了资源文件,不同的分辨率设备的会报错。

4.编码问题: 从github上下载一个开源组件demo导入到本地的Eclispe中,有可能出现这个错误,下载下来的有可能是UTF-8编码,而本地eclipse有可能是gbk编码。

5.内存泄漏: 内存泄漏也有可能引起这个情况。

============4.0   异常android.view.InflateException: Binary XML file line #…: Error inflating class …

具体还要看你遇到的问题的具体提示。  可能由于资源文件找不到xml,   可能是引用了不存在的资源,  可能是标签中所引用的类不在同一包下。

例如"@drawable/..."所引用的图片不存在;

或者

<com.yourpackege.yourLayout

android:id="@+id/name"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@color/transparent"/>中yourLayout这个类不在com.yourpackege中;等等。

Android.View.InflateException: Binary XMLFile Line #异常的解决

可能两种原因引起:

原因一:

必须实现三个构造函数:

public GalleryFlow(Context context) {

super(context);

}

public GalleryFlow(Context context, AttributeSet attrs) {

super(context, attrs);

}

public GalleryFlow(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

原因二: 或者  XML中包错!

<com.yourpackege.yourLayout

android:id="@+id/name"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@color/transparent"/> 中yourLayout这个类不在com.yourpackege中。

原因三:由于虚拟机的内存不够,所以需要清理虚拟机,或者  新建一个内存大的虚拟机。

========  3、0    android.view.InflateException: Binary XML file line #2: Error inflating class 的解决方法

java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.xs8.app/cn.xs8.app.activity.news.Xs8_News_SplashActivity}: 
android.view.InflateException: Binary XML file line #2: Error inflating class
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2262)
at android.app.ActivityThread.access$600(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5145)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:802)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:569)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
at android.app.Activity.setContentView(Activity.java:1943)
at cn.xs8.app.activity.Xs8_BaseActivity.onCreate(Xs8_BaseActivity.java:74)
at cn.xs8.app.activity.news.Xs8_News_SplashActivity.onCreate(Xs8_News_SplashActivity.java:95)
at android.app.Activity.performCreate(Activity.java:5174)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
... 11 more

查看了很多资料都没解决,仔细看看就是没有找到资源文件,看看res/下面的资源文件,全放在drawable-mdpi/目录下,突然灵光一现,

怀疑寻找的位置资源文件不存在,于是将drawable-mdpi/下的资源文件拷贝一份到drawable-ldpi/目录下,还是报上面的错误,再拷贝一份到drawable-hdpi/目录下,问题解决。

还有另外一种解决方法是在res/下建一目录drawable/,将drawable-mdpi/下所有的资源文件都拷贝到drawable/下即可

============ 2.2    xml中 TextView引用已定义好的样式时出错:android.view.InflateException: Binary XML file line #14: Error inflating class

【问题】

android中,在一个xml布局文件中,对于实现已经定义好的样式:

1
2
3
4
5
<style name="NormalText">
    <item name="android:textSize">14sp</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">@color/Gray1</item>
</style>

去引用:

1
2
3
4
5
6
7
8
9
<TextView
    android:id="@+id/scanDeviceHint"
    android:layout_width="230dp"
    android:layout_height="30dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:text="@string/search_device_hint_text"
    android:textStyle="@style/NormalText">
</TextView>

结果出错:

04-08 13:40:23.489: E/AndroidRuntime(17541): FATAL EXCEPTION: main

04-08 13:40:23.489: E/AndroidRuntime(17541): java.lang.RuntimeException: Unable to start activity ComponentInfo{yyy/xxx.ScanActivity}: android.view.InflateException: Binary XML file line #14: Error inflating class <unknown>

04-08 13:40:23.489: E/AndroidRuntime(17541):     at

【解决过程】

1.后来才注意到,其实错误信息中,已经指出来了对应的错误的位置了:

XML file line #14就是此处上面贴出来的错误的部分。

2.后来去参考:

Styles and Themes | Android Developers感觉应该是把:

1
android:textStyle="@style/NormalText"

改为:

1
style="@style/NormalText"

变为:

1
2
3
4
5
6
7
8
9
<TextView
    android:id="@+id/scanDeviceHint"
    android:layout_width="230dp"
    android:layout_height="30dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:text="@string/search_device_hint_text"
    style="@style/NormalText">
</TextView>

结果是:的确可以了。

【总结】

对于Text等内容,去引用已经定义好的Style的话,是:<TextView style="@style/xxx">

而不是:<TextView android:style="@style/xxx">其中,@所引用的xxx的style中, 会包含对应的android:style的相关定义的。

===== 2。1    Android运行时异常“Binary XML file line # : Error inflating class”

在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常,然后整个程序Crash掉......

我遇到该问题常常都是因为修改了资源文件所引起,大致有以下几种方式来解决:

1. 引用类名问题:自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。

2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数

View(Context context)     //Simple constructor to use when creating a view from code

View(Context context, AttributeSet attrs)     //Constructor that is called when inflating a view from XML

View(Context context, AttributeSet attrs, int defStyle)     //Perform inflation from XML and apply a class-specific base style

从文档上的介绍来看,第二个和第三个构造函数对于XML这种引用方式是必须实现的,这三个构造函数应该是在不同的应用场合来实例化一个View对象。

3.编译的中间文件没有清理干净:第三种就是你在原生系统代码的编译环境下编译APK之后,特别是修改了XML,出现标题所述现象,这个时候你只需要删除out目录下编译生成的中间文件夹即可(具体名字记不清了:在编译过程中,系统会将那个位置打印出来,通过串口来看吧,.../out/....../..../classes.dex,你循着这个路径往前推到你的应用的project名字那一层文件夹),删除再重新make就OK了。

4.找不到资源文件:我原来在2.3的原生系统增加动态壁纸的时候,动态壁纸一跑起来就出这个异常,然后crash,当时就是因为找不到drawable的资源文件,于是当时我把drawable的hdpi或nodpi等文件夹的图片资源都拷贝一份到drawble下,问题解决(当时一直不明白系统会根据分辨率来选择加载不同drawable下文件夹的资源,为什么这里必须放入drawable中)。

找不到资源文件? 我也被这个问题困扰过。后来才知道系统应用在编译时并不一定会将所有分辨率的资源文件都打包到apk文件里。可参考:
http://blog.csdn.net/go_rice_/article/details/6096316

必须补充下我遭遇到的确实也是“第5种”...
5.XML语法有隐蔽错误
e.g. android:textSize="@style/Text.Mediumn"
这样的错误、编译时是并不会报错的,竟然会变成动态执行时错误...
感觉至少应该加强一下报错粒度。

遇到这样的:平常我们会把第三方library引入自己的项目里,可是我们的项目里已经有android-support-v4.jar这个包,而library里也有这个,

在运行时可能就会出现ClassNotFoundException,这时我们只要删掉自己项目里的android-support-v4.jar,保留library里的jar包,程序就可以运行了。。

====   2.0补充:    Android 源码编译:资源树下,将drawable-*等文件编译到.apk里

在eclipse ADT环境下,drawable-hdpi/mdpi/ldmpi等drawable文件会被自动编译到.apk文件里,但是在Source Tree下编译的时候,因编译环境的不同,系统可能并不会将所有drawable-*文件全部编译到.apk文件里,这时,我们就不得不修改系统编译环境。

方法1.在编译时直接加上参数   $ make CUSTOM_LOCALES="hdpi mdpi ldpi"

方法2.在androidsrc/build/buildspc.mk.default 中进行如下修改

# Choose additional locales, like "en_US" or "it_IT", to add to any
# built product.  Any locales that appear in CUSTOM_LOCALES but not in
# the locale list for the selected product will be added to the end
# of PRODUCT_LOCALES.
ifndef CUSTOM_LOCALES
CUSTOM_LOCALES:=hdpi mdpi ldpi
endif

修改完后将文件build.mk.default复制到androidsrc目录下并将其重命名为build.mk。

==== 1  android.view.InflateException: Binary XML file line #2: Error inflating class <unknown

莫名其妙的出现这个错,看了logcat 说是什么二进制xml错误啥的。。。

不过后来发现,这个一般都是给eclipse项目中添加图片等资源时出现的一些bug,看似添加到项目中,其实没有,或者是你是选取的引用模式,而你在外面又把那个图片给重命名了,所以在jvm运行时会报错,

说什么xml line # 2  啥的,找不到那个东西。

其实就是你再重新把资源载入一下就好了。

bug_ _ android.view.InflateException: Binary XML file line #2: Error inflating class <unknown的更多相关文章

  1. bug_ _图片_android.view.InflateException: Binary XML file line #1: Error inflating class <unknown>

    =========== 1   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zgan.communit ...

  2. Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误

    这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面.    当时,我仔细检查了一下自己的代码,并 ...

  3. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.LoginActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.L ...

  4. Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class android.support.design.widget.TabLayout,TableLayout引起页面崩溃

    在使用TableLayout的时候,运行引用程序直接Crash. FATAL EXCEPTION: main Process: com.edaixi.activity, PID: 9703 java. ...

  5. widget自定义控件【android.view.InflateException: Binary XML file line #2: Error inflating class...】

    此错误比较难定位,场景是这样的:在一个widget中使用了自定义控件,始终会报 android.view.InflateException: Binary XML file line #2: Erro ...

  6. 错误解决:android.view.InflateException: Binary XML file line #11: Error inflating class com.tony.timepicker.TimePicker

    今天在做项目开发时遇到这么一个错误,完整的错误提示信息如下: java.lang.RuntimeException: Unable to start activity ComponentInfo{co ...

  7. TextInputLayout低版本bug :“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”

    开发中用到TextInputLayout配合TextInputEdittext做输入框,在android7.0 android8.0手机上运行正常,在异步android5.0.2的手机上,点击输入框就 ...

  8. android.view.InflateException: Binary XML file line #34: Error inflating class

    问题一般出在xml的第三方View的全类名,你可能是直接粘贴过来的,没有改成自己项目的全类名.

  9. 【Android开发实践】android.view.InflateException: Binary XML file line #12: Error inflating class fragment问题解决

    一般出现的原因是fragment引入的包错了,应该是import android.app.ListFragment;而不是import android.support.v4.app.ListFragm ...

随机推荐

  1. 越狱Season 1-Episode 15: By the Skin and the Teeth

    Season 1, Episode 15: By the Skin and the Teeth -Pope: doctor...you can leave. 医生你得离开 -Burrows: It's ...

  2. html5 input type=search

    <style> input[type="search"]{ border-radius:2px;} input::-webkit-search-cancel-butto ...

  3. Httptunnel教程

    hts --forward-port localhost:22 80 htc -F 6789 192.168.10.1:80

  4. Oracle Enterprise Manager Cloud Control 12c的安装

    这里,我介绍的是Cloud Control 12c的安装.之前的版本叫Grid Control,这也是11g里面的叫法.在我写这篇博客时,Cloud Control 13c已经出来了,这个版本后续我再 ...

  5. Unity3d 适配机型

    1,为了是更多机型能够安装你的游戏,Unity3d Device Filter设置:ARMv6 with VFP: 2,华为C8600,一运行强制停止: 参考网址:http://forum.unity ...

  6. unity, 同步物体坐标一定要在LateUpdate中进行

    设a为主动物体,b为跟随物体. 如果a,b都在同一个Update里更新坐标,那么两者自然是同步的. 如果a在a.Update里更新位置,而b在b.Update里将自己的位置更新为与a相同,那就会有误差 ...

  7. .net 开源 JavaScript 解析引擎

    1. Javascript .NET 地址为:http://javascriptdotnet.codeplex.com/ 使用方法: Quick Start This section provides ...

  8. MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项

    以下的文章主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用.因此MySQL索引也会有它的缺点: 虽然索引 ...

  9. 【转】 Ucenter同步登录原理解析

    应用中调用函数us_user_synlogin并输出 echo uc_user_synlogin($uid); 解析: 1. 该函数位于client.PHP中 2. 作用实质上是调用ucenter u ...

  10. css之cursor,float

    鼠标形状: 在html中可以任意定义各个标签的显示形状,也可以此用来做些标签显示假像. <body> <p style="cursor: pointer"> ...