• 第1组UI组件:布局管理器


    1 布局管理的来源

      为了让UI在不同的手机屏幕上都能运行良好----不同手机屏幕的分辨率/尺寸并不完全相同,如果让程序手动控制每个组件的大小、位置,会给编程带来巨大的麻烦。为了解决这个问题。android提供了布局管理器。布局管理器可以根据运行平台来调整组件大小,程序员要做的只是为容器选择合适的布局管理器。

    2 布局管理类关系视图

      布局管理器与java的swing编程不同,布局管理器本身就是一个UI组件,所有的布局管理器都ViewGroup的子类,其关系如下图。所有的布局管理器都可以作为容器类使用,通过addView添加组件,另外布局管理器本身也可以作为View组件添加到布局管理器中。

     

    3 线性布局管理器LinearLayout

      线性布局由LinearLayout类代表,将容器里的组件一个挨一个地排列起来,LinearLayout不会自动换行,到末尾后剩余的组件将不会被显示出来。LinearLayout支持的常用xml属性及其说明。

    xml属性 说明
    android:baselineAligned 该属性为false,将会阻止布局管理器与它的子元素基线对其
    android:divider 设置垂直布局时,两个按钮之间的分隔条
    android:gravity 设置布局管理器内组件的对齐方式。该属性支持top/button/left/right/center_vertical/fill_vertical...
    android:measureWithLargestChild 当属性设置为true时,所有带权重的子元素都会具有最大元素的最小尺寸
    android:orientation 设置布局管理器内组件的排列方式vertical/horizontal默认值

    3.1FrameLayout也有LayoutParams,MarginLayoutParams内部类控制参数;如下为LinearLayout.LayoutParams控制属性

    xml属性 说明
    android:layout_gravity 指定该布局管理器内子组件布局方式
    android:layout_weight 指定该子元素在linearLayout中所占的权重

    4 表格布局

    • 表格布局由TableLayout所代表,继承自LinearLayout,因此其本质仍然是线性管理器
    • 表格借助TableRow来控制其他组件的行数与列数,如果某组件独占一行则可省去TableRow直接添加该组件
    • 在表格布局中,列的宽度由该列中最宽的那个单元格所决定;整个表格布局的宽度,则取决于父容器的宽度
    • TableLayout的常用xml属性及其说明
    xml属性 说明
    android:collapseColumns 设置需要被隐藏的列序号,并用逗号隔开
    android:shrinkColumns 设置需要被压缩的列序号,并用逗号隔开
    andriod:stretchColumns 设置需要被拉伸的列序号,并用逗号隔开

    5 帧布局

    • 帧布局由FrameLayout所代表,继承自VIewGroup组件
    • 帧布局为每个加入其中的组件创建一个空白区域(称为一帧)
    • 每个子组件占据一帧,这些帧会根据gravity属性值自动对齐
    • FrameLayout也有LayoutParams,MarginLayoutParams内部类控制参数
    • FrameLayout常用的xml属性及其说明
    xml属性 说明
    android:foreground 设置该帧布局的前景图像
    android:foregroundGravity 定义绘制前景图像的gravity属性

     6 相对布局

    • 相对布局由RelativeLayout代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的,因此这种相对布局方式被称为相对布局
    • 如果A的位置由B组件位置决定,android要求先定义B组件,再定义A组件
    • LayoutParams还继承了MarginLayoutParams,故Relative布局容器也可以指定MarginLayoutParams所支持的属性
    • RelativeLayout可支持两个xml属性
    xml属性 说明
    android:gravity 设置布局容器内各子组件的对齐方式 
    android:ignoreGravity 设置哪个组件不受gravity属性的影响
    • RelativeLayout.LayoutParams可支持的xml属性及其说明
    android:layout_centerHorizontal 控制该子组件是否位于布局容器的水平居中
    android:layout_vertical
    控制该子组件是否位于布局容器的垂直居中
    android:layout_centerInParent 控制该子组件是否位于布局容器的中央位置
    android:layout_alignParentButtom 控制该子组件是否位于布局容器的底端对齐
    android:layout_alignParentLeft 控制该子组件是否位于布局容器的左端对齐
    android:layout_alignParentRight 控制该子组件是否位于布局容器的右端对齐
    android:layout_alignParentTop 控制该子组件是否位于布局容器的顶端对齐
    android:layout_toRightOf 控制该子组件位于给出ID组件的右侧
    android:layout_toLeftOf 控制该子组件位于给出ID组件的左侧
    android:layout_above 控制该子组件位于给出ID组件的上方
    android:layout_below 控制该子组件位于给出ID组件的下方
    android:layout_alignTop 控制该子组件位于给出ID组件的上边界对齐
    android:layout_alignBottom 控制该子组件位于给出ID组件的下边界对齐
    android:layout_alignLeft 控制该子组件位于给出ID组件的左边界对齐
    android:layout_alignRight 控制该子组件位于给出ID组件的右边界对齐

    7 网格布局

    • 网格布局由GridLayout代表,是android4.0新增的布局管理器,如需在早期版本中使用,则需要导入相应的支撑库
    • GridLayout的xml属性及其相关方法
    xml属性 说明
    android:alignmentMode 该布局管理器采用的对齐模式
    android:columnCount 该网格的列数量
    android:columnOrderPreserved 该网格容器是否保留列序号
    android:rowCount 该网格的行数量
    android:rowOrderPreserved 该网格容器是否保留行序号
    android:useDefaultMargins 该布局管理是否使用默认的页边距
    • LayoutParams的xml属性及其相关方法
    xml属性 说明
    android:layout_column 设置该子组件在GridLayout的第几列
    android:columnSpan 设置该子组件在GridLayout的横向跨几列
    android:layout_gravity 该子组件采用何种方式占据网格空间
    android:layout_row 设置该子组件在GridLayout的第几行
    android:layout_rowSpan 设置该子组件在GridLayout的横向跨几行

    8 绝对布局(AbsoluteLayout)

      已过时,很少用,这里不深究

  • 相关阅读:
    技术牛人在阿里内网的公开信:“王坚,你为什么要放弃”
    hadoop日志【6】----mahout的速度
    基于命令行的mahout软件0.8版本Canopy算法分析的数据处理流程
    WolframAlpha
    颠覆编程方式的感知编码:Wolfram雄心勃勃的全新计算模式
    Autolayout及VFL经验分享
    IOS7 Text View 截断的问题解决
    Discuz 首页图文列表实现
    UIResponder详解
    IOS开发之----四舍五入问题
  • 原文地址:https://www.cnblogs.com/penghuster/p/4805002.html
Copyright © 2020-2023  润新知