美文网首页Android 技术文章Android开发经验谈半栈工程师
Android7.0 自定义控件addView(...)无效,V

Android7.0 自定义控件addView(...)无效,V

作者: 蜗牛学开车 | 来源:发表于2017-11-10 17:57 被阅读114次

    问题描述

    昨天在写一个自定义控件的时候遇到一个问题,就是我通过addView(View child) 方法添加View之后再7.0上没有显示出来,6.0上没有问题。通过AS自带的Layout Inspector工具检查发现我的自定义控件的宽高都是0,并且getVisibility()==VISIBLE,也就是说控件是显示的,只是没有宽高所以看不到。
    先看下我addView的代码吧:

    void setFloatContent(ViewGroup floatContent) {
            if (floatContent != null) {
                removeAllViews();
                ViewGroup parent = (ViewGroup) floatContent.getParent();
                if (parent != null) parent.removeView(floatContent);
                addView(floatContent);
            }
        }
    

    解决思路

    其实没有任何解决思路,在网上也找了很久。基本没人遇到过我这样的问题。只发现有一个百度贴吧里面有这个问题,但是也没有人给出有效的答案。

    解决办法

    因为没有人给出有效的解决办法,也看不懂6.0和7.0源码的差别所以只能凭借经验添加代码了。我调试的过程就不说了,那叫一个酸爽(说多了都是泪啊!)只说我的最终解决办法吧:

    void setFloatContent(ViewGroup floatContent) {
            if (floatContent != null) {
                removeAllViews();
                ViewGroup parent = (ViewGroup) floatContent.getParent();
                if (parent != null) parent.removeView(floatContent);
                addView(floatContent);
                floatContent.requestLayout();  //只加了这一行代码。7.0上必须要调用这段代码,否则view不会被测量、排版、绘制。
            }
        }
    

    补充

    虽然问题解决了,但是我研究了半天的源码也没弄明白是为什么。如果有哪路大神路过又恰巧知道原因的话麻烦再下面留个言,小弟感激涕零。谢谢!

    相关文章

      网友评论

        本文标题:Android7.0 自定义控件addView(...)无效,V

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