View 类方法
View 的内部类
MeasureSpec:测量工具类
-
操作的数据是int measureSpec:该measureSpec的最高两位32,31表示Mode,剩余的30位表示真实的大小size
-
int MODE_MASK :掩码(int值为 11 + 30个0)
- android.view.View.MeasureSpec#UNSPECIFIED}(int 值为00+30个 0):不指定,由子类任意决定,
- android.view.View.MeasureSpec#AT_MOST}(int 值为02+30个 0) :由子类自身决定自身的大小,如它所想
- 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文件。
- 已知的实现子类:XmlBlock.Parser
-
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()。