更多问答 >>
-
每日一问 详细的描述下自定义 View 测量时 MesureSpec.UNSPECIFIED
2019-06-20 00:26 -
每日一问 View中的getContext一定返回的是Activity对象吗?
2019-06-23 22:18 -
每日一问 有没有使用过 DataBinding ,有什么优点、缺点,遇到过哪些坑?
2019-06-26 00:23 -
每日一问 | 为什么属性动画移动一个控件后,目标位置仍然能响应用户事件?
2019-06-27 23:50 -
每日一问 ANR的产生的原理是什么,AMS中涉及ANR的代码有哪些?
2019-06-30 22:33 -
每日一问 gradle Transform API 和 Annotation Processor各有什么使用场景?能否相互替换与补充。
2019-06-13 21:54 -
2019-05-29 12:23
-
每日一问 View的onAttachedToWindow ,onDetachedFromWindow 调用时机,使用场景是什么?
2019-05-26 19:19 -
每日一问 你有什么好的学习习惯 或者 不错的 app 推荐给大家?
2019-05-24 11:09 -
每日一问 思考一下如果捕获一个 Activity页面上所有的点击行为?
2019-05-23 00:14

LayoutParams, 它的主要作用是用来协助ViewGroup进行布局的
在自定义ViewGroup过程中,如果需要定义我们自己的LayoutParams的话,
首先要创建一个类(通常为静态内部类),并继承自ViewGroup.LayoutParams或其子类(这个不用说)
ViewGroup需要重写的方法:
第一个, generateDefaultLayoutParams方法, 看名字就大概能猜到了: 生成默认的LayoutParams这个方法会在 往ViewGroup中添加子View时被调用,如果该子View的LayoutParams为空,或者没有直接调用 有LayoutParams参数的addView方法的话。第二个,在ViewGroup添加子View过程中,往往和第三个方法checkLayoutParams配合使用, 这个checkLayoutParams就是检查传进来的LayoutParams是否合法的,当然了,里面的逻辑是怎样的,就要看你怎么重写了,默认的实现是做个非空检查。如果检查到传进来的Params不合法的话,接着就会调用这个generateLayoutParams方法。 第三个方法, 虽然说你不重写,在一般情况下也不会报错,但还是建议重写,并且在里面判断这个传进来的Params,是不是你自己定义的Params。 -----------------------------------------------------------------------------我们平时在xml里写布局时,通常会用到一些ViewGroup提供的属性, 比如FrameLayout的layout_gravity属性、LinearLayout的layout_weight等等。 可以发现,不同的ViewGroup它们所支持的属性也不同,这个其实也就是自定义的LayoutParams属性了,那么我们要怎么去自定义LayoutParams属性呢?
首先,要在自定义的ViewGroup中重写一个generateLayoutParams(AttributeSet attrs)方法,等下可以从attrs中拿到各个子View所设置的属性。
接着,也是像自定义View属性那样,在attrs.xml中去定义一些需要用到的属性,这个styleable的命名格式一般为: "ViewGroup名_Layout" 最后,我们就可以回到LayoutParams中,找到有(Context c, AttributeSet attrs)这个参数的构造方法,在这里面就可以获取到子View中设置的属性了。补充一个。generateLayoutParams(AttributeSet attrs) 主要用于 inflate 处理