• MeasureSpec 解析


    MeasureSpec

    1、A MeasureSpec is comprised of a size and a mode.

    打印成二进制:

    MODE_MASK=11000000000000000000000000000000, //0011左移动30位得到 

    ~MODE_MASK =  00111111111111111111111111111111; 

    size & ~MODE_MASK  :  MeasureSpec 是个32位的int型,后三十位是是分配给size的。


    2、mode有三种:

    //0

    // 01000000000000000000000000000000

     // 10000000000000000000000000000000

    mode & MODE_MASK  :  & 相同取1,相异取0;所以  01&11 =01 ;10 &11=10,后三十位全部为0

                                      MeasureSpec 是个32位的int型,前2位是是分配给mode 的。

    MeasureSpec objects are used to push requirements down the tree from parent to child. A MeasureSpec can be in one of three modes:

    • UNSPECIFIED:    The parent has not imposed any constraint on the child. It can be whatever size it wants. 无限制;,这种情况不多,一般都是父控件是AdapterView,通过measure方法传入的模式。
    • EXACTLY: This is used by the parent to impose an exact size on the child. The child must use this size, and guarantee that all of its descendants will fit within this size. 限制尺寸;当我们将控件的layout_width或layout_height指定为具体数值时如andorid:layout_width="50dip",或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。
     
    • AT MOST: This is used by the parent to impose a maximum size on the child. The child must guarantee that it and all of its descendants will fit within this size. 限制最大尺寸;,当控件的layout_width或layout_height指定为WRAP_CONTENT时,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。

    3、取或:要任一表达式的一位为 1,则结果中的该位为 1。否则,结果中的该位为 0。 如图

    (size & ~MODE_MASK) | (mode & MODE_MASK) 

    MeasureSpec 是个32位的int型,前2位是是分配给mode 的;后三十位是是分配给size的。

    4 getMode()

    如果现在一个 MeasureSpec  =01000000000000000000111100000000;

    01000000000000000000111100000000 & MODE_MASK (11000000000000000000000000000000)=01000000000000000000000000000000  

    //结果值是EXACTLY mode

    5 、getSize()

    如果现在一个 MeasureSpec  =01000000000000000000111100000000

    01000000000000000000111100000000 & ~MODE_MASK(00111111111111111111111111111111)=000000000000000000111100000000  //得出size值111100000000=3840

    出处:http://www.cnblogs.com/sueZheng/p/4046869.html

  • 相关阅读:
    AD9 如何画4层pcb板
    在Altium Designer 2009下如何添加Logo图
    [置顶] 整数拆分 整合算法
    altium designer 中的top/bottom solder和top/bottom paste mask
    vs2012 与 win7 不兼容的问题
    poj1742 Coins
    poj3181 Dollar Dayz
    poj1065 Wooden Sticks
    poj1631 Bridging signals
    poj3666 Making the Grade
  • 原文地址:https://www.cnblogs.com/sueZheng/p/4046869.html
Copyright © 2020-2023  润新知