zoukankan      html  css  js  c++  java
  • Android中的布局 Layout

    布局Layout管理

      布局即是指Activity中组件的呈现方式,即组件大小、间距和对齐方式等。

      Android提供了两种创建布局的方式:

        1.在XML配置文件中声明(推荐)。

        2.在程序中通过代码直接实例化布局及其组件。

    在Android中常见的布局方式:

      线性布局(LinearLayout):按照垂直或者水平方向布局组件。

      帧布局(FrameLayout):组件从屏幕的左上角坐标布局组件。

      表格布局(TableLayout):按照行列方式布局组件。

      相对布局(RelativeLayout):相对其他组件的布局方式。

      绝对布局(AbsoluteLayout):按照绝对坐标来布局组件。(已废)。

      各种布局方式之间可以互相嵌套,只需要将布局理解成为一个容器控件即可,官方的说法叫View Group,见http://developer.android.com/guide/topics/ui/overview.html

     

    线性布局LinearLayout

      线性布局是将子组件按照垂直或者水平方向来布局。

      线性布局的方向由

      android:orientation="vertical"或者"horizontal"来控制。

      一般情况下都是在LinearLayout的开头就设定方向和宽高,至于里面摆放的控件,就具体设定其控件的属性。

      帮助文档:

      http://developer.android.com/reference/android/widget/LinearLayout.html

      里面有很多的属性介绍。

      比较常用的是:

      android:gravity属性,指定控件的基本位置,如设置TextView中的文字的位置。

      android:background指定控件使用的背景色

      android:padding指定控件的内边距,设定一个值之后四个边的内边距都是这个值。

      android:layout_weight属性用来控制各个控件所占空间的权重。

      例子:

      自己新建一个布局文件,放在res\layout文件夹里(貌似文件名必须都是小写字母。

      布局文件如下:

    LinearLayout
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
         
         <TextView
             android:id = "@+id/firstText"
             android:text="@string/TextOne"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             >
         </TextView>
              
         <TextView
             android:id = "@+id/secondText"
             android:text="@string/TextTwo"
             android:gravity="center_vertical"
             android:background="@color/red"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="2"
             >
         </TextView>
                   
         <TextView
             android:id = "@+id/thirdText"
             android:text="@string/TextThree"
             android:gravity="center"
             android:textColor="@color/blue"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="3"
             >
         </TextView>
        
        
     </LinearLayout>

      运行结果如下:

                             

    帧布局FrameLayout

      http://developer.android.com/reference/android/widget/FrameLayout.html

      帧布局是从屏幕的左上角坐标(0,0)开始布局,多个组件层叠排序,后面的组件覆盖前面的组件。

      帧布局中没有权重这一说。

      把上文中的LinearLayout改为FrameLayout,

      程序运行结果如下:

      

      其中红色是第二个TextView的背景色,而第三个TextView没有背景色,直接覆盖在上面了。

     

    表格布局TableLayout

      http://developer.android.com/reference/android/widget/TableLayout.html

      表格布局以行、列表格的方式布局子组件。

      TableLayout中使用TableRow来定义多行。

      TableLayout中如果不用TableRow,则所有控件从上到下排列。

      用了TableRow,每个TableRow中的控件构成多列。

      如下图,每一个TableRow中放两个TextView:

      

      属性android:stretchColumns表示拉伸列,表示如果填充不满时,拉伸该序号(序号从0开始)的列,填满空间。

      比如设置

      android:stretchColumns="0"后,拉伸第一列。

      如下图:

      

      android:collapseColumns表示隐藏指定的列。

      表格布局的代码: 

    TableLayout
    <?xml version="1.0" encoding="UTF-8"?>
    <TableLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"    
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="0"
        
        >
         <TableRow>
         <TextView
             android:id = "@+id/firstText"
             android:text="@string/TextOne"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
    
             >
         </TextView>
              
         <TextView
             android:id = "@+id/secondText"
             android:text="@string/TextTwo"
             android:gravity="center_vertical"
             android:background="@color/red"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
    
             >
         </TextView>
         </TableRow>
          
         <TableRow>
         <TextView
             android:id = "@+id/thirdText"
             android:text="@string/TextThree"
             android:gravity="center_vertical"
             android:textColor="@color/blue"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
    
             >
         </TextView>
              
         <TextView
             android:id = "@+id/fourthText"
             android:text="@string/TextFour"
             android:gravity="center_vertical"
             android:background="@color/green"
             android:textColor="@color/blue"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
    
             >
         </TextView>
         </TableRow>
    
        
        
     </TableLayout>

    相对布局RelativeLayout

      相对布局按照组件之间的相对位置来布局,如在某个组件的左右上下等。

      http://developer.android.com/reference/android/widget/RelativeLayout.html

      通过设置控件的属性来设置控件的相对位置。

      属性可以分为四大类:

      第一类:上下左右四个相对位置。

      第二类:边缘对齐的五个属性(加上一个基线对齐)。

      第三类:是否和父控件在上下左右边缘对齐的四个属性。

      第四类:居中方式的三个属性。

      前两类设置时设置指定控件的id,后两类的值为true或者false。

     

    绝对布局AbsoluteLayout

      绝对布局通过指定子组件的确切XY坐标位置,该类已经过期,可以使用其他布局代替之。

    资源

      布局教程汇总:http://www.apkbus.com/android-50865-1-1.html

      官方文档教程:http://developer.android.com/guide/topics/ui/declaring-layout.html

     

  • 相关阅读:
    8.3学习日志
    8.2学习日志
    8.1学习日志
    Chapter 2
    未命名 1
    pugixml
    C++使用Json作为数据包装格式的通信
    项目FAQ
    xcode语法高亮插件
    【转】jsoncpp在xcode中的使用
  • 原文地址:https://www.cnblogs.com/mengdd/p/2825382.html
Copyright © 2011-2022 走看看