欢迎光临散文网 会员登陆 & 注册

自定义ViewGroup问题解决

2023-06-21 17:36 作者:便宜酒  | 我要投稿

·为什么测量父要先测量子?

父需要确定给不给得起。


·为什么测量子需要父的测量规格?measureChild(child, widthMeasureSpec, heightMeasureSpec);

父布局分三种:知道多大,很大但不知道多大,还没分配。相应的子控件也分三种:知道要多少(子控件一样大),有多少全给,控件多大就要多少(子控件不一样大)。


·layoutParams是什么?

layoutParams代表xml里设置的宽高,但它不是int,API里有相应方法转化为int。

 

·getMeasuredWidth和getWidth的区别?

前者在measure()结束后就有,后者是布局结束后才有


·宽和高的测量模式和wrap、match、具体值是什么关系?

width:

Match-exactly-1080

Wrap-at_most-1080

100dp-exactly-300px

height:

Match-unspecified-0

Wrap-unspecified-0

100dp-exactly-300px


·对子控件设置ViewGroup.MarginLayoutParams layoutParams = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

和xml里对子控件的设置的是什么关系?认哪个?

认java代码。条目样式xml里的最外层设置的大小和间距是没用的,它相当于画布,条目真正的大小、背景最好从第二层开始,大小会被java覆盖,但是间距是直接不认,java不设置那就会默认0 

·总结:大小和间距都只认优先java设的,写java的时候可以照着xml写

·上面可以看到自定义view继承的是ViewGroup,必须至少双参构造,即必须用代码设置并传入子控件的layoutParam。继承LinearLayout可以单参构造,认xml设置的子控件大小,但是不认xml里的间距,所以意义不大。


·注意事项:在自定义布局的代码中,getLayoutParamchild.getLayoutParam分别获取的是父与子的布局参数。





自定义ViewGroup问题解决的评论 (共 条)

分享到微博请遵守国家法律