bug_ _ android.view.InflateException: Binary XML file line #2: Error inflating class <unknown
========= 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的更多相关文章
- 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 ...
- Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误
这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面. 当时,我仔细检查了一下自己的代码,并 ...
- 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 ...
- 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. ...
- widget自定义控件【android.view.InflateException: Binary XML file line #2: Error inflating class...】
此错误比较难定位,场景是这样的:在一个widget中使用了自定义控件,始终会报 android.view.InflateException: Binary XML file line #2: Erro ...
- 错误解决:android.view.InflateException: Binary XML file line #11: Error inflating class com.tony.timepicker.TimePicker
今天在做项目开发时遇到这么一个错误,完整的错误提示信息如下: java.lang.RuntimeException: Unable to start activity ComponentInfo{co ...
- TextInputLayout低版本bug :“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”
开发中用到TextInputLayout配合TextInputEdittext做输入框,在android7.0 android8.0手机上运行正常,在异步android5.0.2的手机上,点击输入框就 ...
- android.view.InflateException: Binary XML file line #34: Error inflating class
问题一般出在xml的第三方View的全类名,你可能是直接粘贴过来的,没有改成自己项目的全类名.
- 【Android开发实践】android.view.InflateException: Binary XML file line #12: Error inflating class fragment问题解决
一般出现的原因是fragment引入的包错了,应该是import android.app.ListFragment;而不是import android.support.v4.app.ListFragm ...
随机推荐
- VS2013远程调试功能
我跪了,我真的跪了. 实际证明这是不可行的. [开发机] Win10,64bits,VS2013 [目标机] Winxp VS2013的debug tool不能在xp上安装运行,卒! 如果有win7, ...
- Make和Makefile编写(详见GCC手册)
Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makef ...
- java的nio之:java的nio系列教程之Scatter/Gather
一:Java NIO的scatter/gather应用概念 ===>Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Chann ...
- 释放Linux系统预留的硬盘空间【转】
http://www.cnblogs.com/ggjucheng/archive/2012/10/07/2714294.html 前言 大多数文件系统都会保留一部分空间留作紧急情况时用(比如硬盘空间满 ...
- 异步IO/数据库/队列/缓存
同步与异步的性能区别 mport gevent def task(pid): """ Some non-deterministic task ""& ...
- VGG_19 train_vali.prototxt file
name: "VGG_ILSVRC_19_layer" layer { name: "data" type: "ImageData" ...
- POI读取excel
HSSF是Horrible Spread Sheet Format的缩写 读取2007版本前 XSSF是XML Spread Sheet Format的缩写 读取2007版本后(包含2007)
- Debug
memory dump就是程序留下的一个犯罪现场,而你就是一个侦探,侦查技术越高,发现的秘密也越多,破案也就越容易.
- rac 11g_生产库日志组损坏处理
原创作品,出自 "深蓝的blog" 博客,转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...
- 模仿ViewPager控件
自定义控件是开发中经常使用的技术.系统中自带的ViewPager实现的功能有时候不能满足开发的需要,如ViewPager没有滑动图片时的动画切换效果.通过对 ViewPager的模仿和部分功能的加强, ...