zoukankan      html  css  js  c++  java
  • ViewGroup的onMeasure和onLayout分析

    参考网址:

    1、http://blog.csdn.net/linghu_java/article/details/23882681

    2、http://blog.csdn.net/androiddevelop/article/details/8104763

          onLayout传下来的l,t,r,b分别是放置父控件的矩形可用空间(除去margin和padding的空间)的左上角的left、top以及右下角right、bottom值。

    该方法是View的放置方法,在View类实现。调用该方法需要传入放置View的矩形空间左上角left、top值和右下角right、bottom值。

    这四个值是相对于父控件而言的。例如传入的是(10, 10, 100, 100),则该View在距离父控件的左上角位置(10, 10)处显示,

    显示的大小是宽高是90(参数r,b是相对左上角的),这有点像绝对布局。

            

    public class MyViewGroup extends ViewGroup {
     
        // 子View的水平间隔
        private final static int padding = 20;
         
        public MyViewGroup(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
     
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            // TODO Auto-generated method stub
             
            // 动态获取子View实例
            for (int i = 0, size = getChildCount(); i < size; i++) {
                View view = getChildAt(i);
                // 放置子View,宽高都是100
                view.layout(l, t, l + 100, t + 100);
                l += 100 + padding;
            }
             
        }
         
    }

     通过上面的例子可以发现,通过getChildCount()函数获取到,孩子的个数,

    然后通过获取到的孩子View view = getChildAt(i);,来调用layout()方法,view.layout(l, t, l + 100, t + 100);

    完成视图的布局。

  • 相关阅读:
    Android中使用File文件进行数据存储
    Android 获取 json
    Android服务之Service
    php
    宝塔数据库连接不上
    idea中使用github
    elasticjob 当当的分布式定时任务管理
    定时任务规则生成器
    MySQL中group_concat()函数的排序方法
    mysql 中关于怎么写 row_number()over(order by) 类似的功能支持
  • 原文地址:https://www.cnblogs.com/zhangbaowei/p/4732319.html
Copyright © 2011-2022 走看看