View和ViewGroup

View和ViewGroup

Android的UI界面都是View和ViewGroup及其子类组合而成的。View是所有UI组件的父类,其子类称为组件(Widget);ViewGroup是布局管理器,本身也是继承自View类,其子类称为布局(Layout)。Android布局管理器的类图如下:


View和ViewGroup_第1张图片

属性

android:gravity 用于控制所包含的子元素的对齐方式,其值有top、bottom、left、right、center、center_horizontal、center_vertical、fill、fill_horizontal、 clip_vertical、clip_horizontal,以上的值可单独出现(如:android:layout_gravity="center_horizontal"),也可以组合的形式出现(如:android:layout_gravity="center_horizontal|bottom")

android:layout_gravity 设置该子View在父容器中的对齐方式

android:layout_margin 设置View和View之间的距离

android:padding 设置View里面的内容相对于View的边框的距离

View和ViewGroup_第2张图片

ViewGroup的种类

ViewGroup有很多种类,常见的有LinearLayout、RelativeLayout、FrameLayout、AbsoluteLayout、GirdLayout、TableLayout。其中,LinearLayout和RelativeLayout使用的最多的两种。


LinearLayout

LinearLayout,即线性布局。顾名思义,LinearLayout布局里的View一个挨着一个,成线性排列。

属性

android:orientation 设置LinearLayout内View的排列方式,可以设置horizontal(水平排列,默认值)、vertical(垂直排列)两个值的其中之一

android:layout_weight 指定该子元素在LinearLayout中所占的权重(注意:该属性只有在LinearLayout布局中才有效)

效果演示

xml布局文件:

View和ViewGroup_第3张图片

View和ViewGroup_第4张图片

效果图:

View和ViewGroup_第5张图片

android:layout_weight详解

  1. android:layout_weight,又称权重,只有在LinearLayout布局中,该属性才有效;

  2. 当LinearLayout布局中只有唯一一个有权重的子View时,不管该子View的权重设为多少,该子View都会占满父容器剩下的空间;

  3. 在android:orientation="horizontal"时,当LinearLayout布局中不止有一个子View有android:layout_weight(即权重)属性,并且子View的权重不一样的时候,设置android:layout_width为match_parent和wrap_content(或0dp,后面会有解释)时,会造成两种截然相反的效果。

  1. 设置android:layout_width="match_parent"时:

    xml布局文件:

    View和ViewGroup_第6张图片

    View和ViewGroup_第7张图片

    效果图:

    View和ViewGroup_第8张图片

    可以看到layout_weight=”1”的占了三分之二,而layout_weight=”2”的占了三分之一。

  2. 设置android:layout_width="wrap_content"时:

    xml布局文件:

    View和ViewGroup_第9张图片

    View和ViewGroup_第10张图片

    效果图:

    View和ViewGroup_第11张图片

    可以看到layout_weight=”1”的占了三分之一,而layout_weight=”2”的占了三分之二。

总结:

android:orientation为horizontal时:

  1. layout_width设置为match_parent的时候,weight权值越小所代表的是你的控件要优先尽可能的大,但这个大是有限度的,即match_parent;

  2. layout_width设置为wrap_content的时候,weight权值越小所代表的是你的控件要优先尽可能的小,但这个小是有限度的,即wrap_content;

  3. 当使用weight属性时,将width设为0dp即可,效果跟设成wrap_content是一样的。

android:orientation为vertical时与为horizontal道理一样,只不过变成了layout_height为match_parent和wrap_content时会有截然不同的效果。


RelativeLayout

RelativeLayout,相对布局,这里的相对有两层含义。一是子View相对于父容器的位置,二是父容器中一个子View相对于另一个子View的位置。

属性

子View与父容器的相对位置

(以下属性的值为boolean类型,即只有false和true,默认为false)

android:layout_centerHorizontal 控制子View是否位于父容器的水平居中位置

android:layout_centerVertical 控制子View是否位于父容器的垂直居中位置

android:layout_centerInParent 控制子View是否位于父容器的中央位置

android:layout_alignParentTop 控制子View是否与父容器顶端对齐

android:layout_alignParentBottom 控制子View是否与父容器底端对齐

android:layout_alignParentLeft 控制子View是否与父容器左边对齐

android:layout_alignParentRight 控制子View是否与父容器右边对齐

View与View的相对位置

android:layout_above 控制使用该属性的View位于给出ID的View的上方

android:layout_below 控制使用该属性的View位于给出ID的View的下方

android:layout_toLeftOf 控制使用该属性的View位于给出ID的View的左侧

android:layout_toRightOf 控制使用该属性的View位于给出ID的View的右侧

android:layout_alignTop 控制使用该属性的View与给出ID的View的上边界对齐

android:layout_alignBottom 控制使用该属性的View与给出ID的View的下边界对齐

android:layout_alignLeft 控制使用该属性的View与给出ID的View的左边界对齐

android:layout_alignRight 控制使用该属性的View与给出ID的View的右边界对齐

效果演示

xml布局文件:

View和ViewGroup_第12张图片

View和ViewGroup_第13张图片

效果图:

View和ViewGroup_第14张图片

你可能感兴趣的:(View和ViewGroup)