游戏网站开发推广计划书,seo推广有哪些公司,公司网页设计制作有哪些,烟台北京网站建设公司文章目录 继承ViewGroup重写onMeasure方法#xff1a;计算并设置布局控件的高度重写onLayout方法#xff1a;计算并设置每个子控件的位置具体的代码实现小结 继承ViewGroup 重写generateLayoutParams#xff0c;设置子控件的LayoutParams为MarginLayoutParams类型 Overridep…文章目录 继承ViewGroup重写onMeasure方法计算并设置布局控件的高度重写onLayout方法计算并设置每个子控件的位置具体的代码实现小结 继承ViewGroup 重写generateLayoutParams设置子控件的LayoutParams为MarginLayoutParams类型 Overridepublic LayoutParams generateLayoutParams(AttributeSet attrs) {return new MarginLayoutParams(getContext(), attrs);}
重写onMeasure方法计算并设置布局控件的高度
子控件的两种情况 第一种情况所有子控件的宽度是一致且固定的布局控件的宽度是固定高度不确定 1.获取子控件的固定的宽高
measureChildWithMargins(childView, widthMeasureSpec, 0, heightMeasureSpec, 0);
int childWidth child.getMeasuredWidth();
int childHeight child.getMeasuredWidth(); 注意使用View.getMeasuredWidth/Height()需要确保使用之前该View对象已经被measure过 2.获取布局控件的measured宽度
int width MeasureSpec.getSize(widthMeasureSpec); 3.计算一行放置多少个子控件根据子控件个数和布局控件的measured宽度确定布局控件的高度
setMeasuredDimension(width, height); 第二种情况每个子控件的宽度都不固定布局控件的宽度是固定高度不确定 1.获取布局控件的measured宽度
int width MeasureSpec.getSize(widthMeasureSpec); 2.遍历布局控件中所有子控件 1.获取每个子控件的宽度
measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0);
childWidth child.getMeasuredWidth();
childHeight child.getMeasuredHeight(); 2.累加子控件的宽度判断是否当前子控件是否需要换行需要换行重新累加子控件的宽度累加高度 3.遍历结束设置布局控件的高度
setMeasuredDimension(width, height);
重写onLayout方法计算并设置每个子控件的位置
遍历布局控件中所有子控件计算设置每个子控件的位置childLeft, childTop
child.layout(childLeft , childTop,childLeftchildWidth, childTop childHeight); 具体的代码实现 Android UI 代码实现:可换行的布局控件
小结