美文网首页Android
View和ViewGroup

View和ViewGroup

作者: AshengTan | 来源:发表于2016-04-03 23:15 被阅读443次

    View和ViewGroup

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


    属性

    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的边框的距离

    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布局文件:


    效果图:

    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布局文件:


      效果图:

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

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

      xml布局文件:


      效果图:

      可以看到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

        本文链接:https://www.haomeiwen.com/subject/dxmulttx.html