Android中ViewGroup.Params整理总结
来源:互联网 发布:wordpress转zblog php 编辑:程序博客网 时间:2024/06/05 06:24
1.所有以”layout_”开头的属性都是属于LayoutParams或者LayoutParams的子类的,而不属于View的,但是在View绘制的measure或者其他过程中,会解析LayoutParams的属性,这样又影响到了View的绘制;
2.基类LayoutParams是ViewGroup类里的一个静态内部类,只提供了width和height两个属性,对应于xml里的layout_width和layout_height;3.ViewGroup.MarginLayoutParams继承自ViewGroup.LayoutParams,只是比父类多了
public int leftMargin;
public int topMargin;
public int rightMargin;
public int bottomMargin;
private int startMargin;
private int endMargin;
几个margin相关的属性。
注意:在xml布局里,layout_margin属性的值会覆盖layout_marginLeft与layout_marginRight等属性的值。
4.如果自定义ViewGroup时想要支持Margin属性,还要扩展其他属性,那么最好继承并扩展ViewGroup.MarginLayoutParams。
5.为一个View创建LayoutParams的时候,最好创建View对应的父类LayoutViewGroup类型的LayoutParams,例如LinearLayout.LayoutParams,这样就可以得到LinearLayout的宽高、weight、gravity等属性,并进行设置。
而不要只是创建一个ViewGroup.LayoutParams类型的对象,这样只会有宽高两个属性可用。
如果确定只用到宽高这两个属性,那么也可以创建ViewGroup.LayoutParams类型的对象,这样不易产生LayoutParams类型不匹配的错误。
6.一般建议,用java添加view时,按照新建View、新建LayoutParams、为View设置LayoutParams、最后ViewGroup.addView(view)的顺序书写代码,这样ViewGroup会进行LayoutParams类型校验避免崩溃;如果按照新建View、新建LayoutParams、ViewGroup.addView(view)、最后为View设置LayoutParams的顺序书写代码,那么如果LayoutParams类型不匹配可能出现崩溃。因为最后为View设置LayoutParams完成后,ViewGroup会直接
重绘刷新视图,不会校验LayoutParams类型,系统会有一步类型强制转换过程,有可能崩溃。
并且,ViewGroup.addView(view),ViewGroup绘制了一次,然后再为View设置LayoutParams,ViewGroup又绘制了一次,性能较低,虽然系统会对重绘的流程有优化。
7.根据上述1、2、3、4、5条的描述,在java代码中,动态为view设置Params时,要新建该view对应的直接父布局类型的Params(如果只用到了宽高属性,新建ViewGroup.Param类型的也可以)。例如新建的TextView打算发到LinearLayout中,也就是TextView的直接父布局是LinearLayout,那么最好为TextView新建一个LinearLayout.Params对象,然后再为该TextView设置param参数;如果TextView的父布局是LinearLayout类型布局,那么如果为TextView新建的是RelativeLayout.Params类型或者FrameLayout.Params等其他类型的Param,那么有可能会导致程序崩溃(崩溃情况参考上述第6条描述)。
http://blog.csdn.net/yisizhu/article/details/51582622
阅读全文
0 0
- Android中ViewGroup.Params整理总结
- Android 中自定义ViewGroup的初步总结
- Android中自定义ViewGroup
- Android中自定义ViewGroup
- Android中自定义ViewGroup
- Android中自定义ViewGroup
- Android自定义ViewGroup的总结
- 【android】ViewGroup中使用TabHost
- 深入理解Android中ViewGroup
- 深入理解Android中ViewGroup
- [转载] Android中自定义ViewGroup
- 深入理解Android中ViewGroup
- Android ViewGroup 中处理event
- 深入理解Android中ViewGroup
- Android学习:自定义ViewGroup方法总结
- Android ViewGroup学习总结-初步(Demo)
- Android开发教程:自定义ViewGroup方法总结
- android View/ViewGroup 的生命周期总结笔记
- 堆 优先队列等
- html前端命名规则
- js基础笔记
- Hibernate搭建开发环境+简单实例(二)
- Recyclerview三种布局获取数据+Springview刷新
- Android中ViewGroup.Params整理总结
- 加油
- Github上怎么修改别人的项目并且提交给原作者!图文并茂!
- nginx
- JavaScript中eval详解
- PHP设计模式系列
- 单例模式
- NavigationView的头部的事件监听
- 插入排序 心得