Android xml 自定义View需要写全路径,而系统自带的却不用?原因就在此

(1)在Android 入门刚入门的时候,学习原生的控件,到后来,原生控件不满足开发的需求的,就自定义控件,但是自定义的控件需要写上全路径,不然就会报错,正所谓知其然知其所以然,后来就翻看了布局填充器(LayoutInflater)的源码,具体的实现类是PhotoLayoutInflater。

部分代码

View createViewFromTag(View parent,String name ,AttributeSet attrs){
·····
  if(view==null){
   if(-1 == name.indexOf('.')){
    view =onCreateView(parent,name,attrs);//系统自带
 }else{
   view=createView(name,null,attrs);
   }
  }
}
也就是说ceatViewFromTag里面会去判断 name 是否含有‘’.”,如果有,则认为是自定义view,否则就是系统自带,也就是最后走下面这个方法。

@override
protected View onCreateView(String name,AttributeSet attrs) throws ClassNoFoundException{
private static final String[] sClassPrefixList={"android.widget.","android.webkit."}
   for(String prefix:sClassPrefixList){
     View view =createView(name,prefix,attrs);
 }
}

否则就走

public final View createView(String name, String prefix, AttributeSet attrs){
     if (constructor == null) {
        // Class not found in the cache, see if it's real, and try to add it
   //如果prefix不为空就构造view路径并加载
                clazz = mContext.getClassLoader().loadClass(
                        prefix != null ? (prefix + name) : name).asSubclass(View.class);}


而TextView .Button等都在

android.widget.这个包下
所以,就知道为啥原生控件不用写全路径,而自定义View就要了。

end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值