码迷,mamicode.com
首页 > 移动开发 > 详细

Android measure和layout的一点理解

时间:2014-07-11 22:43:33      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   使用   

首先,推荐文章,http://blog.csdn.net/hqdoremi/article/details/9980481http://www.docin.com/p-571954086.html

我理解measure的作用有2个:一个就是调用子view的measure函数,生成他们的高度和宽度,以便在自己的layout阶段参考;另一个是为父view提供关于自己的测量的width和height(这个宽度和高度往往和子view的测量高度和宽度有关),以便父view在layout阶段参考。

layout的作用就是布局子view的大小位置,这里可以使用刚才测量出的width和height,也可以不使用(当然,系统自带的布局都是使用的,因为这是推荐的规范做法),这完全取决于你想实现的布局效果(比如我可以知道子view的确定位置,就可以直接调用子view的layout函数定位,根本不用什么测量值),所以measure产生的mMeasuredWidth和mMeasuredHeight仅仅是参考用的。

把measure和layout分开,更方便重用系统控件。比如ListView不想使用滚动条,想把内容全部现实出来,就可以简单地重写一个onMeaure函数,继续使用默认的onLayout函数。代码如下:

public class NoScrollListView extends ListView{
    public NoScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
        int mExpandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, mExpandSpec);
    }
}

这里的onMeaure,修改了父view对listview的高度说明,改为“最多达到最大整数值”,其实就意味着当父view布局这个listview时,分配的高度,是不受父view高度限制了(感觉listview之所以出现滚动条,是在onMeasure中根据父view的大小来判断的),所以listview会把内容全部加载到了父view上,没有了滚动条,当然,超过父view的地方看不见,需要配合scrollview使用。

Android measure和layout的一点理解,布布扣,bubuko.com

Android measure和layout的一点理解

标签:android   style   blog   http   color   使用   

原文地址:http://www.cnblogs.com/breezemist/p/3833118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!