美文网首页
View的context强转为Activity,一定是吗?

View的context强转为Activity,一定是吗?

作者: iBoss | 来源:发表于2017-07-28 18:23 被阅读0次

    【参考:http://androidwing.net/index.php/225

    问题:

    view是写在xml里的,代码里面setContextView(),其实就是PhoneWindow的setContentView():

    view是LayoutInflater解析xml反射出来的。view的context就是LayoutInflater的mContext:

    这个LayoutInflater的context是PhoneWindow传进去的:

    PhoneWindow的context就是Activity的this:

    所以,也就是说,一个写在xml里的View,他的context就是Activity。 源码是这样告诉我的。可是为什么4.x都崩了呢,4.x的view的context到底是什么呢?

    回答:
    所有Appcompat的Activity,创建View的时候,都会对基本View做一个风格的包装,也就是说ImageView会变成AppcompatImageView。 那么实际上,imageView.context 是AppcompatImageView的getContext().
    研究发现,AppcompatImageView并没有重写getContext()方法,那么到底怎么回事呢,直接看他的构造器:



    卧槽,坑爹呢这是! 发现即使context传进来是个activity,也回被包装成TintContextWrapper。
    那么为什么5.0以上系统,获得的还是一个Activity呢?
    继续看:




    nnd,原来如此,看样子是v7包为了能加载到一些特殊资源,给包裹成了TintContextWrapper。 所以强转出错!!!

    相关文章

      网友评论

          本文标题:View的context强转为Activity,一定是吗?

          本文链接:https://www.haomeiwen.com/subject/kwyflxtx.html