视图View

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图View相关的知识,希望对你有一定的参考价值。

获得LayoutInflater实例:

LayoutInflater layoutInflater=LayoutInflater.from(context);

得到LayoutInflater实例之后,就可以调用他的inflate()方法来加载布局:

layoutInflater.inflate(resourceId,root);

inflate方法一边拿有两个参数,第一个参数就是要加载的布局id,第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传null。这样就成功创建了一个布局的实例,之后将他添加到指定的位置就可以显示出来。

 

android中的任何一个布局、任一个控件都是直接或间接继承自View,如TextView、Button、ImageView、ListView等。

每一个视图的绘制过程都必须经过三个最主要的阶段:onMeasure()、onLayout()和onDraw()

一、onMeasure()

View系统的绘制流程会从ViewRoot的performTraversals()方法中开始,在其内部调用View的measure()方法。measure方法接收两个参数,widthMeasureSpec和heightMeasureSpec,这两个值分别用于确定视图的宽度和高度的规格和大小。

MeasureSpec的值由specMode和specSize共同组成,其中specSize记录的是大小,specMode记录的是规格。specMode一共有三种类型,如下:

1.EXACTLY

表示俯视图喜旺子视图的大小应该是有specSize的值来决定的,系统默认会按照这个规则来设置子视图的大小,开发人员当然可以按照自己的沂源设置成任意大小。

2.AT_MOST

表示姿势图最多只可能是specSize中指定的大小

3.UNSPECIFIED

表示开发人员可以将视图按照自己的意愿设置成任意大小,没有任何限制,这种情况不太会用到

childWidthMeasureSpec=getRootMeasureSpec(desirWindowWidth,lp.width);

childHeigthMeasureSpec=getRootMeasureSpec(desirWindowHeigth,lp.height);

可以看到,这里调用了getRootMeasureSpec()方法去获取widthMeasureSpec和heightMeasureSpec的值,注意方法中传入的参数,其中lp.width和lp.height在创建ViewGroup实例时就被赋值了,他们都等于MATCH_PARENT,然后看下getRootMeasureSpec()方法中的代码:

private int getRootMeasure(int windowSize,int rootDimension){

int measureSpec;

switch(rootDimension){

measureSpec=MeasureSpec.makeMeasureSpec(WindowSize,MeasureSpec.EXACTLY);

break;

}

}

 

以上是关于视图View的主要内容,如果未能解决你的问题,请参考以下文章

视图(View)与部分视图(Partial View)之间数据传递

如何在一个视图上创建多个视图

9、Django视图(View与APIView)

怎么在oracle中查询出所有的视图view?

深入解析MySQL视图view

数据库-视图(View)详解