精华内容
下载资源
问答
  • onMeasure

    2016-07-09 11:26:48
    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){ setMeasureDimension( measurewidth(widthMeasureSpec), measureHeight(heightMeasureSpec) ) } private int measureWid

    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){

    setMeasureDimension(

    measurewidth(widthMeasureSpec),

    measureHeight(heightMeasureSpec)

    )

    }




    private int measureWidth(int measureSpec){

    int result = 0;

    int specMode = MeasureSpec.getMode(measureSpec);

    int specSize = MeasureSpec.getSize(measureSpec);

    if(specMode == MeasureSpec.EXACTLY){

    result = specSize;

    }else{

    result = 200;//指定的大小

    if(specMode == MeasureSpec.AT_MOST){

    result = Math.min(result,specSize);

    }

    }


    return result;

    }

    展开全文
  • onmeasure

    2012-05-05 10:31:20
    onMeasure方法在控件的父元素正要放置它的子控件时调用.它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.  它们指明控件可获得的空间以及关于这个空间描述...
        onMeasure方法在控件的父元素正要放置它的子控件时调用.它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.

      它们指明控件可获得的空间以及关于这个空间描述的元数据.
      比返回一个结果要好的方法是你传递View的高度和宽度到setMeasuredDimension方法里.

      接下来的代码片段给出了如何重写onMeasure.注意,调用的本地空方法是来计算高度和宽度的.它们会译解widthHeightSpec和heightMeasureSpec值,并计算出合适的高度和宽度值.

    java代码:

    1. @Override
    2. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    3. int measuredHeight = measureHeight(heightMeasureSpec);
    4. int measuredWidth = measureWidth(widthMeasureSpec);
    5. setMeasuredDimension(measuredHeight, measuredWidth);
    6. }

    7. private int measureHeight(int measureSpec) {


    8. // Return measured widget height.
    9. }

    10. private int measureWidth(int measureSpec) {

    11. // Return measured widget width.
    12. }
    复制代码

           边界参数——widthMeasureSpec和heightMeasureSpec ,效率的原因以整数的方式传入。在它们使用之前,首先要做的是使用MeasureSpec类的静态方法getMode和getSize来译解,如下面的片段所示:

    java代码:
    1. int specMode = MeasureSpec.getMode(measureSpec);
    2. int specSize = MeasureSpec.getSize(measureSpec);
    复制代码

           依据specMode的值,如果是AT_MOST,specSize 代表的是最大可获得的空间;如果是EXACTLY,specSize 代表的是精确的尺寸;如果是UNSPECIFIED,对于控件尺寸来说,没有任何参考意义。
      当以EXACT方式标记测量尺寸,父元素会坚持在一个指定的精确尺寸区域放置View。在父元素问子元素要多大空间时,AT_MOST指示者会说给我最大的范围。在很多情况下,你得到的值都是相同的。
      在两种情况下,你必须绝对的处理这些限制。在一些情况下,它可能会返回超出这些限制的尺寸,在这种情况下,你可以让父元素选择如何对待超出的View,使用裁剪还是滚动等技术。

      接下来的框架代码给出了处理View测量的典型实现:

    java代码:
    1. @Override

    2. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    3. int measuredHeight = measureHeight(heightMeasureSpec);

    4. int measuredWidth = measureWidth(widthMeasureSpec);

    5. setMeasuredDimension(measuredHeight, measuredWidth);

    6. }

    7. private int measureHeight(int measureSpec) {

    8. int specMode = MeasureSpec.getMode(measureSpec);
    9. int specSize = MeasureSpec.getSize(measureSpec);

    10. // Default size if no limits are specified.

    11. int result = 500;
    12. if (specMode == MeasureSpec.AT_MOST){

    13. // Calculate the ideal size of your
    14. // control within this maximum size.
    15. // If your control fills the available
    16. // space return the outer bound.

    17. result = specSize;
    18. }
    19. else if (specMode == MeasureSpec.EXACTLY){

    20. // If your control can fit within these bounds return that value.
    21. result = specSize;
    22. }

    23. return result;
    24. }

    25. private int measureWidth(int measureSpec) {
    26. int specMode = MeasureSpec.getMode(measureSpec);
    27. int specSize = MeasureSpec.getSize(measureSpec);

    28. // Default size if no limits are specified.
    29. int result = 500;
    30. if (specMode == MeasureSpec.AT_MOST){
    31. // Calculate the ideal size of your control
    32. // within this maximum size.
    33. // If your control fills the available space
    34. // return the outer bound.
    35. result = specSize;
    36. }

    37. else if (specMode == MeasureSpec.EXACTLY){
    38. // If your control can fit within these bounds return that value.

    39. result = specSize;
    40. }

    41. return result;
    42. }
    复制代码
    展开全文
  • NPE onMeasure

    2020-12-08 23:08:08
    at android.support.design.widget.CollapsingToolbarLayout.onMeasure(CollapsingToolbarLayout.java:411) at android.view.View.measure(View.java:22002) at android.view.ViewGroup.measureChildWithMargins...
  • Android onMeasure

    2020-06-28 10:58:09
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mWidth = MeasureSpec.getSize(widthMeasureSpec); mHeight = MeasureSpec....
     @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            mWidth = MeasureSpec.getSize(widthMeasureSpec);
            mHeight = MeasureSpec.getSize(heightMeasureSpec);
            int widthMode = MeasureSpec.getMode(widthMeasureSpec);
            int heightMode = MeasureSpec.getMode(heightMeasureSpec);
            if (widthMode == MeasureSpec.EXACTLY) {
                mWidth = Math.min(mWidth, mHeight);
            } else {
                mWidth = dp2px(getContext(), 50);
            }
            if (heightMode == MeasureSpec.EXACTLY) {
                mHeight = Math.min(mWidth, mHeight);
            } else {
                mHeight = dp2px(getContext(), 50);
            }
            mWidth = mHeight = Math.min(mWidth, mHeight);
            setMeasuredDimension(mWidth, mHeight);
        }

    布局里边进行设置wrap_content  并不能实现,最后还是在onMeasure这里使用的自己设置的值,exactly 和 at most 是一样的...

    展开全文
  • onLayout onMeasure

    2018-06-23 00:00:00
    View的measure方法会调用自己的onMeasure方法。 View要在onMeasure中计算自己的大小,并将结果通过调用setMeasuredDimension(int width, int height)来保存结果。 同时也要调用子Vie...
        

    View的measure方法会调用自己的onMeasure方法。
    View要在onMeasure中计算自己的大小,并将结果通过调用setMeasuredDimension(int width, int height)来保存结果。
    同时也要调用子View的measure方法要求子View去计算自己的大小。调用子View的measure方法时传的参数要根据当前onMeasure接收的参数和子View的layout_width、layout_height属性。当layout_width属性是wrap_content时应该传AT_MOST和从onMeasure方法得到的width。当layout_width属性是match_parent时应该传EXACTLY和从onMeasure方法得到的width。当layout_width属性是固定值时应该传EXACTLY和layout_width对应的固定值(如果该固定值超过从onMeasure方法得到的width则传后者)。
    计算结果可以通过getMeasuredWidth()和getMeasuredHeight()获取。


    当一个控件的Layout方法被调用后geiWidth和getHeight 方法返回值才不会是0。
    View的layout方法会被父View调用。
    View的layout方法会调用自己的onLayout方法。
    View要在onLayout方法中调用子View的layout方法去放置子View。

    展开全文
  • onMeasure相关

    2016-08-23 18:12:10
    1、继承自View的自定义View为什么要重写onMeasure方法: View.java中的onMeasure方法如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize...
  • 转载请标明出处: ... 本文出自:【openXu的博客】 目录:onMeasure什么时候会被调用 onMeasure方法执行流程 MeasureSpec类 从ViewGroup的onMeasure到View的onMeasure ViewGroup中三个测量子控件的方法 getChi
  • 覆写onMeasure例子

    热门讨论 2012-10-23 22:25:03
    Android 自定义view,覆写onMeasure例子
  • android onMeasure 实现

    2018-12-20 00:05:25
    文章目录`View`的 `onMeasure``onMeasure`要关注那些内容:子控件的宽高能大于父控件吗?能正常的处理逻辑:`ViewGroup` 的 `onMeasure` View的 onMeasure onMeasure要关注那些内容: 子控件的宽高能大于父控件吗?...
  • onMeasure方法

    2014-05-29 11:42:09
    有两个对布局界面影响很的方法,onDraw(),和onMeasure(). onDraw()比较好理解.onMeasure()就比较难理解一些,也更复杂些 ,引用文档中的说法就是: onMeasure() is a little more involved. 其实还有另一个...
  • Android OnMeasure

    2015-06-08 15:14:11
    http://stackoverflow.com/questions/13099652/custom-rotating-of-an-image-view ...onMeasure() is your opportunity to tell Android how big you want your custom view to be dependent the layo
  • onMeasure和Measure

    2019-03-12 06:36:35
    onMeasure void onMeasure (int widthMeasureSpec, int heightMeasureSpec) 测量View和它的内容来确定measured width和measured height,这个方法被measure(int, int)调用,而且会被子类重写来准确高效的测量他们的...
  • 理解onMeasure

    2014-01-18 11:17:55
    理解onMeasure 分类: Android2012-12-11 14:07 1227人阅读 评论(1) 收藏 举报  Android系统调用onMeasure来定义view的大小,很长时间理解不是很透彻,今天花了些时间打日志来理解它。总结如下。 ...
  • android Onmeasure

    2014-05-10 11:17:32
    笔记- - android中 Onmeasure方法会在绘图前,也就是Ondraw()方法调用前调用,也就是Onmea
  • 关于onMeasure

    2012-01-29 09:37:04
    关于onMeasure 1、onMeasure方法在控件的父元素正要放置它的子控件时调用。它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec 和heightMeasureSpec。它们指明控件可获得的空间以及...
  • onMeasure学习整理

    2016-11-02 11:11:44
    onMeasure函数如下:protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)onMeasure函数的调用者:包含这个View的具体的ViewGroup调用,参数也就是从这个ViewGroup中传入的。 widthMeasureSpec与...
  • onMeasure实例分析

    2019-09-23 23:48:53
    上面这个两个视图是Android API中没有给出来的但在来电接听和闹钟被使用到的一个widget视图——GlowPadView.java ...我们通过源码来看看这个View的大小是怎么通过onMeasure来控制的。 ...
  • Android onMeasure自定义

    2018-11-23 17:14:27
    在Android中,onMeasu的源码 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), ...
  • onMeasure
  • onMeasure的写法

    2018-04-21 14:35:15
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } private int measureWidt...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,386
精华内容 2,154
关键字:

onmeasure