Android中的布局(layout)

1.主要的五种布局:

线性布局 - Linear Layout:按排列的方向(orientation)分为水平线性布局(

android:orientation="vertical"

)和垂直线性布局(

android:orientation="horizontal"//默认的是水平线性布局

)。

线性布局定义了排列方向后,会一直沿着该方向一直排列下去,除非利用嵌套再重新定义。

如下图所示,可以看做由多个水平线性布局组合而成的垂直线性布局。

常用代码:

android:layout_weight="数字" //表示剩余空间该控件所占的百分比,通常用于平均几个控件之间的位置,定义为1

注意: 区分“android:gravity”和“android:layout_gravity”。

android:gravity:是对控件本身来说的,是用来设置“控件自身的内容”应该显示在“控件自身体积”的什么位置,默认值是左侧。

android:layout_gravity:是相对于控件的父元素来说的,设置该控件在它的父元素的什么位置。

 

拓展连接:

相对布局 - Relative Layout:

android:layout_alignParentLeft="true" 位于父容器左上角

android:layout_alignParentBottom, android:layout_alignParentTop,

android:layout_alignParentRight  只能在父控件为RelativeLayout时才起作用,而对于像LinearLayout这样的布局不起作用

android:layout_centerInParent="true" 位于布局容器的中央位置;

layout_centerHorizontal位于布局容器水平居中位置;

layout_centerVertical位于布局容器垂直居中位置

被参照控件:控件与控件之间位置

android:layout_below="@id/***" 位于***组件下方 

android:layout_toLeftOf="@id/###"位于###组件左则,紧贴并列

控件与控件之间对齐方式 

android:layout_alignLeft="@id/***"与***组件左边界紧贴对齐,叠在一起;

android:layout_alignTop="@id/###"与###组件上边界对齐

可以通过另一个控件的ID来确定当前控件的位置(即任意两个控件之间的相对位置)。

android:layout_marginTop=“25dip” //顶部距离
 
android:gravity=“left” //控件中文本位置
 
android:layout_marginLeft="15dip //距离左边距
 
// 相对于给定ID控件
 
android:layout_above 将该控件的底部置于给定ID的控件之上(将该控件置于指定控件的上面);
 
android:layout_below 将该控件的顶部置于给定ID的控件之下(将该控件置于指定控件的下面);

 

表格布局 - Table Layout:

表格布局模型以行列的形式管理子控件,每一行为一个TableRow的对象,当然也可以是一个View的对象。TableRow可以添加子控件,每添加一个为一列。N个TableRow之间是以N行的行数的方式纵向排列。

android:shrinkColumns="n”:设置第n+1列为可收缩的列。当可收缩的列太宽(内容过多)不会被挤出屏幕。当需要设置多列为可收缩时,将列序号用逗号隔开。

android:stretchColumns="n”:设置第n+1列为可伸展的列,以填满剩下的多余空白空间,若有多列需要设置为可伸展,请用逗号将需要伸展的列序号隔开。               

      列元素(Button)属性,定义子控件。

    android:layout_colum:设置该控件在TableRow中指定的列

  android:layout_span:设置该控件所跨越的列数

<TableRow/> 
<Button
android:layout_weight="wrap_content"
android:layout_height="wrap_content"
android:text="为什么"/>
<Button    
android:layout_weight="wrap_content"    
android:layout_height="wrap_content"    
android:text="你在这"/>

 

 

网格布局—Graid Layout:

网格布局是水平线性布局的,当控件水平方向达到定义的列数时会自动跳行

以下是一个计算器的例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<GridLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:rowCount="5" //定义行最大格数为5,列最大格数为4的格子
    android:columnCount="4"
    >
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="40dp"
        android:layout_columnSpan="4"
        android:layout_gravity="fill"
        />//定义计算器的输入框

    <Button
        android:text="1"
        android:textSize="30dp"/>
    <Button
        android:text="2"
        android:textSize="30dp"/>
    <Button
        android:text="3"
        android:textSize="30dp"/>
    <Button
        android:text="/"
        android:textSize="30dp"/>
    <Button
        android:text="4"
        android:textSize="30dp"/>
    <Button
        android:text="5"
        android:textSize="30dp"/>
    <Button
        android:text="6"
        android:textSize="30dp"/>
    <Button
        android:text="*"
        android:textSize="30dp"/>
    <Button
        android:text="7"
        android:textSize="30dp"/>
    <Button
        android:text="8"
        android:textSize="30dp"/>
    <Button
        android:text="9"
        android:textSize="30dp"/>
    <Button
        android:text="="
        android:textSize="30dp"
        android:layout_rowSpan="3"//表示=的该格子占了3行
        android:layout_gravity="fill"//如果需要往水平或竖直方向填充该控件,这句话不写,会多空出两个格子,但不会充满三个格子/>
    <Button
        android:text="0"
        android:textSize="30dp"
        android:layout_columnSpan="2"
        android:layout_gravity="fill"/>
//该格子占了两列
    <Button
        android:text="."
        android:textSize="30dp"
        android:layout_rowSpan="2"
        android:layout_gravity="fill"
        />
    <Button
        android:text="+"
        android:textSize="30dp"/>
    <Button
        android:text="-"
        android:textSize="30dp"/>

</GridLayout>
</LinearLayout>

 结果图:

绝对布局 - AbsoluteLayout:

绝对布局的子控件需要指定相对于此坐标布局的横纵坐标值,手机应用需要适应不同的屏幕大小,而这种布局模型不能自适应屏幕尺寸大小,所以应用的相对较少。

android:layout_x="10px"水平绝对位置

android:layout_y="10px"垂直绝对位置

 

帧布局 – FrameLayout:

帧布局,默认针对左边位置的(可用

android:layout_gravity="center"定义位置

)。所有的控件都有各自的坐标位置来显示-->

又框架布局是最简单的布局形式。所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。

 

posted @ 2016-09-19 20:39  下一个秋天  阅读(6247)  评论(0编辑  收藏  举报