您的位置:首页 > 移动开发 > Android开发

Android java.lang.UnsupportedOperationException以及布局异常处理

2017-11-23 17:22 591 查看
           项目中出现 java.lang.UnsupportedOperationException然后报出布局文件异常,即android.view.InflateException: Binary XML file line #168: Error inflating class,然后仔细去查看我们的布局文件,一切正常,但还是InflateException。

           其实UnsupportedOperationException这个异常然后导致InflateException原因是多方面。UnsupportedOperationException这是不支持操作的异常。

           我罗列一下大致几种情况:

          1.Android 4.x及一下的设备使用5.0以后MD设计引入的colorPrimary等属性造成的异常

          2.有些给予Android原生系统再次开发的系统、Rom不支持Start、End,简单更改为Left、Right,比如Layout_alignParentStart、layout_alignParentEnd,在一些厂商特别定制的系统是不兼容的,所以我们要去使用兼容的属性

          3.项目没有clean干净,导致build目录存在老文件,然后导致失败

           其实上面这几种都是比较好解决的,只要我们使用兼容的属性,基本不会有什么问题。我来讲另一种我们很难注意到的一种情况,然后会导致这种异常的报错。

         


         一眼明了,转换尺寸异常,然后就导致不支持操作,从而抛出InflateException。这是我们很难发现的一个小细节。因为我们在做屏幕适配的时候,我们会适配不同的屏幕分辨率。我们会创建很多valuexx-xx文件夹,然后我们定义不同分辨率的尺寸大小。但是前提我们应该要知道,当其中一个分辨率适配不到我们定义的valuexx-xx文件夹的时候,系统默认会去加载一个存在的value文件夹下的dimens.xml。

          比如适配1920×1080,需要在res文件夹下创建value-1920×1080,然后定义一个dimens.xml文件,定义在这个分辨率下的所有尺寸。然后我们在其中一个布局文件引用此尺寸,比如@dimens/x20dp,运行设备就会自动适配到value-1920×1080。当我们用了640×480的设备,运行然后加载此布局就肯定会抛出异常,因为我们木有适配这个屏幕大小。

          所以,最通用的方法,我们也需要在res/value/dimens.xml下默定义一套默认的尺寸,记住,名字千万要保持一致。这也是屏幕适配的原理。好了,言归正传,如果你发现了这个异常,有dimension:type=0x1的时候,你就要去检查你的dimens.xml文件下和你适配屏幕的文件夹,定义的尺寸有没有保持一致。

         文件和文件名,定义的名字保持一致。

          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐