View 类方法

View 的内部类

MeasureSpec:测量工具类

  • 操作的数据是int measureSpec:该measureSpec的最高两位32,31表示Mode,剩余的30位表示真实的大小size

  • int MODE_MASK :掩码(int值为 11 + 30个0)

    1. android.view.View.MeasureSpec#UNSPECIFIED}(int 值为00+30个 0):不指定,由子类任意决定,
    2. android.view.View.MeasureSpec#AT_MOST}(int 值为02+30个 0) :由子类自身决定自身的大小,如它所想
    3. android.view.View.MeasureSpec#EXACTLY}(int 值为01+30个 0) :由父类指定固定的大小
  • static getMode(int measureSpec):
    返回该measureSpec的最高两位,即它所代表的Mode

  • static getSize(int measureSpec):
    返回该measureSpec的后30位,表示它所代表的真实大小size.

  • int makeMeasureSpec(int size, int mode):
    返回一个具有mode信息和size信息的 measureSpec

  • fill_parent,wrap_content,xxdp与mode的对应关系:

    private int getRootMeasureSpec(int windowSize, int rootDimension) {
    int measureSpec;
    switch (rootDimension) {
    case ViewGroup.LayoutParams.MATCH_PARENT:
    measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.EXACTLY);
    break;
    case ViewGroup.LayoutParams.WRAP_CONTENT:
    measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.AT_MOST);
    break;
    default:
    measureSpec = MeasureSpec.makeMeasureSpec(rootDimension, MeasureSpec.EXACTLY);
    break;
    }
    return measureSpec;
    }

ViewGroup.LayoutParams

  • 构造方法(所有的构造方法都是赋值了自身的width,height属性):R.styleable.ViewGroup_Layout 只包含两个属性,layout_width 和 layout_height

      public LayoutParams(Context c, AttributeSet attrs) {
          TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.ViewGroup_Layout);
          setBaseAttributes(a,
                  R.styleable.ViewGroup_Layout_layout_width,
                  R.styleable.ViewGroup_Layout_layout_height);
          a.recycle();
      }
    
  • 属性:width,height 代表layout_width,layout_height

  • 常量值:

    public static final int FILL_PARENT = -1;
    public static final int MATCH_PARENT = -1;
    public static final int WRAP_CONTENT = -2

AttributeSet 与 XmlPullParser 与 TypedArray关系

  • XmlPullParser 类:
    对xml文件的读取解析。
    只能循环,从头部读到尾部

  • AttributeSet 接口:

    • 已知的实现子类:XmlBlock.Parser
      getAttributeXxxxx( String attribute),
      根据attribute来获取对应的值。
      采用“一 取 一”的方式获取xml中的某个属性的值
      是用来方便读取Xml文件。
  • TypedArray 类:本质上是一个数组,用来装载从当前的上下文Context下所指向的layout.xml布局文件(AttributeSet)里某个View控件的属性值集合。

    • 产生:
      由 Theme 类的 obtainStyledAttributes(AttributeSet set,int[] attrs, int defStyleAttr, int defStyleRes) ,返回array

    • 最重要的两个参数,set:表示当前上下文所指的xml文件里该View控件的xml部分,attrs表示某styleable的属性值。

    • obtainStyledAttributes :内部实现,持有该两个参数

      XmlBlock.Parser parser = (XmlBlock.Parser)set
      array.mRsrcs = attrs;
      array.mXml = parser;

注意:由于TypedArray是持有了xml文件的读取流,所以最后要关闭它recycle()。

posted @ 2015-10-30 08:36  beyondbycyx  阅读(208)  评论(0编辑  收藏  举报