Android7.0 自定义控件addView(...)无效,View的绘制流程(onMeasure、onLayout等)完全没执行的解决办法。
2017-06-30 10:17
826 查看
问题描述
昨天在写一个自定义控件的时候遇到一个问题,就是我通过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不会被测量、排版、绘制。 } }
补充
虽然问题解决了,但是我研究了半天的源码也没弄明白是为什么。如果有哪路大神路过又恰巧知道原因的话麻烦再下面留个言,在下感激涕零。如果我的方法解决了你的问题也麻烦帮忙赞一个。谢谢!相关文章推荐
- Android进阶——自定义View之View的绘制流程及实现onMeasure完全攻略
- WebView在API 17后调addJavascriptInterface方法无效的解决办法
- Android ListView 和ScroolView 出现onmeasure空指针的解决办法
- PopupWindow自定义动画 在onDismiss执行动画无效的解决办法
- iOS 在tableview的侧滑事件里执行tableView.selectRow无效的解决办法
- Android中View的绘制过程 onMeasure和onLayout()方法
- WebView在API 17后调addJavascriptInterface方法无效的解决办法
- 每日一学(三) android View绘制流程之onMeasure()分析
- (总结篇)Android 牛不牛?决定于自定义View控件(一)——view绘制流程(onMeasure,onLayout,onDraw)
- ActivityGroup里面装的子Activity不执行OnActivityResult()的解决办法
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android 2.3 WebView AddJavascriptInterface解决办法
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 关于AutoCompleteTextView设置背景无效的解决办法
- 您的设备不支持add-on属性 ——的解决办法
- iOS6, UITableViewStyleGrouped类型的UITableView 设置背景色无效 解决办法
- onActivityResult执行的时机不对,解决办法
- 火狐浏览器下JS代码不兼容setTimeout函数失效无效不运行执行的解决办法