Android之自定义view引用xml,Android自定义View在XML中映射错误
Android开发中我们经常会遇到自定义View地址映射错误的情况,现将遇到的情况做下总结:
//Android Studio的异常信息
Error inflating class
1、直接像下面这样,包名所对应的地址错误:在XML中我们地址是com.kcrason.kcircle.widget.HaoRecyclerView,而在实际的项目包名中可能为com.kcrason.kcircle.HaoRecyclerView,从而导致异常信息。
android:id="@+id/rv_list"
android:listDivider="@color/gray"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
2、包含include标签的XML,且include中的View中含有错误的自定义View的地址,如下面所示,include标签中的include_view有错误,一般最容易让人忽略。
android:id="@+id/rv_list"
android:listDivider="@color/gray"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
3、在Android系统进行XML映射时出现错误,一般来说,即自定义View的初始化操作有问题。通常我们在自定义View时都是构建一个 init() 方法进行一些初始化操作,而正是这些操作造成了一个隐患。因为如果在解析XML中的自定义View不成功时,或者说在这一过程出现了异常时,所抛出的异常信息依然是 Error inflating class ,这是一个非常隐蔽的错误,一般而言,我们不通过断点调试,很难发现到底出了什么问题。
PS:我们在构建自定义View时设置View的背景颜色-
private void init(){
//此处省略
...
setBackground(context.getDrawable(R.color.white));
//此处省略
...
}
乍一看好像没啥问题,确实,这段代码在Android 5.0及以上的系统上跑没有任何问题,但是在Android 5.0以下就会直接抛出上面的异常信息。首先 setBackground() 只在API 16及以上才支持,同时 context.getDrawable() 更是LOLLIPOP才支持的方法。而就目前而言,Android studio自定推荐的最低项目版本都是在API 15,结果可想而知。这样写就不再有问题,虽然会提示我们该方法已经过期,但是没关系。当然你也可以通过版本判断,不同版本下使用不同的方法,从而解决这一问题。
setBackgroundDrawable(context.getResources().getDrawable(R.color.white));
当然,这里所讲的并不是为了说明版本的适配问题,而是为了更清楚的阐述关于自定义View所造成的一些问题。
4、自定义View时,构造方法有问题。这个一般很少出现。
PS:关于自定义组件,还需要注意的一点是,如果时内部类,这个类就不能作为layout中的节点的名称,而必须用view作为节点名,然后加入一个class属性,值为该内部类的引用,比如launcher中又下面这样一个例子:
class="com.android.launcher2.AllApps2D$HomeButton"
android:id="@+id/all_apps_2d_home"
android:tag="all_apps_2d_home"
android:src="@drawable/home_button"
android:background="#FF000000"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="@dimen/button_bar_height"
android:nextFocusUp="@+id/all_apps_2d_grid"
android:nextFocusDown="@null"
android:nextFocusLeft="@null"
android:nextFocusRight="@null"
/>
Android之自定义view引用xml,Android自定义View在XML中映射错误相关推荐
- android 自定义view xml ,Android实现在xml文件中引用自定义View的方法分析
本文实例讲述了Android实现在xml文件中引用自定义View的方法.分享给大家供大家参考,具体如下: 在xml中引用自定义view 方法一: android:layout_width=" ...
- Android 自定义View二(深入了解自定义属性attrs.xml)
1.为什么要自定义属性 要使用属性,首先这个属性应该存在,所以如果我们要使用自己的属性,必须要先把他定义出来才能使用.但我们平时在写布局文件的时候好像没有自己定义属性,但我们照样可以用很多属性,这是为 ...
- 使用XML声明自定义Android UI元素
如何使用XML声明Android UI元素? #1楼 Google似乎更新了其开发者页面,并在那里添加了各种培训. 其中一个处理自定义视图的创建,可以在这里找到 #2楼 除了大多数投票的答案. obt ...
- 【Android 修炼手册】常用技术篇 -- Android 自定义 View
这是[Android 修炼手册]系列第 9 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 看完本文可以达到什么程度 学会自定义 View 以及其 ...
- Android自定义滑动进度条,Android自定义View实现圆形水波进度条
每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...
- android view 渐变动画,Android自定义view渐变圆形动画
本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...
- android自定义view生命周期,android基础之自定义view
一.Custom View 1.view的继承关系 view继承关系.png 2.Android 如何绘制试图层次 当activity获取焦点时,它必须提供layout层次的根节点,然后android ...
- android 自定义view控件,Android 自定义View——自定义View控件
Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个.那么如何自定义控件? 学习自 ...
- android 自定义布局 根据布局获取类,阿里高级Android面试题解析:Android自定义View—布局过程的自定义...
自定义分三部分绘制.布局和触摸反馈,本篇主要讲的布局过程的自定义 布局过程的含义 布局过程,就是程序在运行时利用布局文件的代码来计算出实际尺寸的过程. 布局过程的工作内容 两个阶段:测量阶段和布局阶段 ...
最新文章
- ODOO权限管理,在两个方面设置权限
- 实现无锁的栈与队列(1)
- 我国网民规模已达7.51亿 但网络安全值得警惕
- Python简明教程
- mysql 基本使用教程(源于网络)
- mysql5.7.21源码安装
- Kotlin学习笔记——安装配置kotlin
- C语言中CY位什么时候才能为1_你真的了解C语言中的整型吗?
- 一篇文章带初学者明白:什么是编译器,什么是集成开发环境(IDE)?
- 锅巴文件共享软件地址和说明
- php在登录页面使用ajax,使用Ajax安全的登录界面
- call和apply的作用和不同
- 【彻底解决】django migrate (mysql.W002) 【专治强迫症】
- Java小白进阶笔记(5)-进阶面向对象
- yuv420转yuv422(yuyv)
- 杭州英博电磁流量计通讯协议
- 网络设备高可用性简例
- 设计模式之简单工厂、工厂方法、抽象工厂
- 通过linux进程号(pid)查找Oracle的session中都执行那些sql
- 网络套接字------IP地址
热门文章
- 解码python_Python解码
- php求未知数怎么求,PHP的-输入未知数的字段到MySQL-为此的最佳...
- python写空气质量提醒_你所在的城市空气质量如何?用Python可视化分析空气质量...
- python删除指定文件夹下文件和文件夹的方法
- python中的set类型
- Python基础练习题合集
- Python技巧:不要在for与while循环后写else块
- powershell共享服务器写文件,Windows PowerShell:共享您的脚本 - 轻松实现
- centos7重启桌面服务_CENTOS7安装桌面系统
- C语言函数调用过程的汇编分析(停更)