`

Android onMeasure

阅读更多

Android  控件onMeasure方法详解

measure:测量的意思

1、onMeasure会在该控件的父控件放置该控件时被调用

重写onMeasure(int widthMeasureSpec, int heightMeasureSpec)

        int specModeH = MeasureSpec.getMode(heightMeasureSpec);
        int specModeW = MeasureSpec.getMode(widthMeasureSpec);

MeasureSpec.getMode(int)会有三个值向对应

如果是AT_MOST,specSize 代表的是最大可获得的空间;
如果是EXACTLY,specSize 代表的是精确的尺寸;
如果是UNSPECIFIED,对于控件尺寸来说,没有任何参考意义

MeasureSpec有3种模式分别是UNSPECIFIED, EXACTLY和AT_MOST

 

 

2、那么这些模式和我们平时设置的layout参数fill_parent, wrap_content有什么关系呢?
经过代码测试就知道,当我们设置width或height为fill_parent时,容器在布局时调用子 view的measure方法传入的模式是EXACTLY,因为子view会占据剩余容器的空间,所以它大小是确定的。
而当设置为 wrap_content时,容器传进去的是AT_MOST, 表示子view的大小最多是多少,这样子view会根据这个上限来设置自己的尺寸。当子view的大小设置为精确值时,容器传入的是EXACTLY, 而MeasureSpec的UNSPECIFIED模式目前还没有发现在什么情况下使用。

View的onMeasure方法默认行为是当模式为UNSPECIFIED时,设置尺寸为mMinWidth(通常为0)或者背景drawable的最小尺寸,当模式为EXACTLY或者AT_MOST时,尺寸设置为传入的MeasureSpec的大小。

有个观念需要纠正的是,fill_parent应该是子view会占据剩下容器的空间,而不会覆盖前面已布局好的其他view空间,当然后面布局子 view就没有空间给分配了,所以fill_parent属性对布局顺序很重要。以前所想的是把所有容器的空间都占满了,难怪google在2.2版本里把fill_parent的名字改为match_parent

在两种情况下,你必须绝对的处理这些限制。在一些情况下,它可能会返回超出这些限制的尺寸,在这种情况下,你可以让父元素选择如何对待超出的View,使用裁剪还是滚动等技术。

 

setMeasuredDimension(400, 300);

这句代码可以指定该控件的宽高

 

0
0
分享到:
评论

相关推荐

    android自定义组件(七) onMeasure测量尺寸

    `onMeasure`方法在Android的View类中被定义,它是测量组件大小的核心方法。当一个View或ViewGroup需要确定其子视图的尺寸时,会调用这个方法。通常,自定义组件需要重写`onMeasure`以确保它们能正确地根据内容或特定...

    覆写onMeasure例子

    在Android中,`onMeasure()`方法用于测量View的尺寸,它决定了View的宽度和高度。通常,我们会在自定义View中覆写这个方法,以便根据内容或者特定需求计算出合适的大小。下面将详细介绍`onMeasure()`的工作原理以及...

    Android View 的onMeasure方法详解和例子解释

    在Android开发中,`onMeasure()`方法是布局和视图尺寸计算的核心,它负责确定一个View的精确宽度和高度。本文将深入解析`onMeasure()`的工作原理,通过一个实例来帮助理解这一关键过程。 首先,`onMeasure()`方法在...

    Android View.onMeasure方法详解及实例

    Android View.onMeasure方法详解及实例 View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1、什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想...

    Android 重写ViewGroup 分析onMeasure()和onLayout()方法

    Android 重写ViewGroup 中onMeasure()和onLayout()方法详解 Android 中的 ViewGroup 是一个抽象类,继承自 View,提供了基本的布局管理功能。为了提供更好的自定义布局,需要重写 ViewGroup 中的两个重要方法:...

    Android下如何理解onMeasure,onLayout的过程

    onLayout在Android中view如何完成绘制这个过程介绍了很多,但是很多理论化的东西,最近重新整理一下,通俗的讲解一下。View绘制过程就好比你向银行贷款, 在Android中view如何完成绘制这个过程介绍了很多,但是很多...

    onMeasure简单方法 完美解决ListView与ScollView!

    近期做项目碰到ScrollView与Listview冲突的情况,查看了网上一些解决listview和scollView的冲突的方法,最终选择了重写onMeasure的方法来解决这个问题。 在此对各种方法做一个个人的总结评价。 主要的方法有四种: ...

    博客<FlowLayout详解(一)——onMeasure()与onLayout()>对应源码

    博客《FlowLayout详解(一)——onMeasure()与onLayout()》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/47029169

    Android ListView 和ScroolView 出现onmeasure空指针的解决办法

    `onmeasure`方法在Android中是控件测量自身大小的关键步骤,它定义了控件的尺寸。默认情况下,LinearLayout重写了此方法,能够正确处理子视图的测量,但其他如RelativeLayout、FrameLayout等并未重写,因此在这些...

    Android自定义标签选择器TagView

    在Android开发中,自定义视图是提升用户体验和界面独特性的重要手段。本文将深入探讨如何创建一个自定义标签选择器TagView。TagView通常用于显示一组可选的标签,如分类、关键词或兴趣点,用户可以点击选择或取消...

    Android自定义日期选择器源码

    使用`onDraw()`方法进行绘图,而`onMeasure()`方法用于确定视图的大小。 2. **数据模型**:定义一个数据结构来存储当前选中的日期,以及可选的日期范围。这可能是`Calendar`对象或者自定义的日期类。 3. **事件...

    android自定义垂直seekbar

    在Android开发中,SeekBar是一种常用的用户界面组件,它允许用户通过滑动条来选择一个介于最小值和最大值之间的数值。默认情况下,SeekBar是水平排列的,但有时为了满足特定的设计需求,我们可能需要创建一个垂直...

    android三种自定义Loading加载框

    然后,通过重写`onMeasure()`来设置合适的大小,并在`postInvalidateDelayed()`或`postInvalidateOnAnimation()`中实现动画逻辑。 ```java public class CustomLoadingView extends View { private int current...

    Android-TrapezoidPartsView-梯形控件

    2. `onMeasure()`:测量视图的大小,根据`MeasureSpec`计算合适的尺寸。 3. `onLayout()`:布局视图,确定各子元素的位置(如果继承了`ViewGroup`)。 4. `onDraw()`:在画布上绘制内容,这里会绘制梯形。 除了绘制...

    android自定义圆盘方向按钮

    3. **onMeasure()**:此方法用于确定控件的大小。根据圆盘半径和内边距计算控件的宽度和高度,并调用`setMeasuredDimension()`设置尺寸。 4. **onTouchEvent()**:处理用户的触摸事件。我们需要监听ACTION_DOWN、...

    Android开发TextView排版问题取消自动换行

    在Android应用开发中,TextView是显示文本的基本组件,它用于展示单行或多行文本。在某些场景下,开发者可能需要自定义TextView的行为,比如取消默认的自动换行功能,以便实现一行显示完整内容或者特定的排版效果。...

    android 设置控件按宽:高=4:3显示

    综上所述,要让Android控件按照4:3比例显示,可以采用多种策略,包括利用`adjustViewBounds`属性,自定义控件并重写`onMeasure()`方法,以及在LinearLayout中使用权重。这些技术可以帮助开发者灵活地控制布局,以...

    android垂直滚动条(VerticalSeekbar)

    在这个自定义类中,我们需要重写`onMeasure()`方法来调整尺寸,以及`onDraw()`方法来改变绘图方向。 2. **布局文件** 在XML布局文件中,我们需要创建一个自定义的垂直滚动条实例,引用我们之前创建的自定义View类...

    android实例竖着的seekbar

    要创建垂直SeekBar,我们需要创建一个新的自定义View类,继承自Android的SeekBar类,并重写其关键方法,主要是`onMeasure()`和`onDraw()`。 ```java public class VerticalSeekBar extends SeekBar { ... @...

Global site tag (gtag.js) - Google Analytics