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"

/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值