• Android 之布局


    1、RelativeLayout相对布局

    a)、第一类:属性值为true或false
      android:layout_centerHrizontal 水平居中
      android:layout_centerVertical 垂直居中
      android:layout_centerInparent 相对于父元素完全居中
      android:layout_alignParentBottom 贴紧父元素的下边缘
      android:layout_alignParentLeft 贴紧父元素的左边缘
      android:layout_alignParentRight 贴紧父元素的右边缘
      android:layout_alignParentTop 贴紧父元素的上边缘  

      b)、第二类:属性值必须为id的引用名“@id/id-name
      android:layout_below 在某元素的下方
      android:layout_above 在某元素的的上方
      android:layout_toLeftOf 在某元素的左边
      android:layout_toRightOf 在某元素的右边
      android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
      android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
      android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
      android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐



      c)、第三类:属性值为具体的像素值,如30dip,40px
      android:layout_marginBottom 离某元素底边缘的距离
      android:layout_marginLeft 离某元素左边缘的距离
      android:layout_marginRight 离某元素右边缘的距离
      android:layout_marginTop 离某元素上边缘的距离

    1  <Button
    2         android:id="@+id/button1"
    3        android:layout_width="wrap_content"                //宽度匹配内容
    4         android:layout_height="wrap_content"               //高度匹配内容  
    5         android:layout_alignParentLeft="true"                         //贴紧父元素左边
    6         android:layout_alignParentTop="true"               //贴紧父元素上边 
    7         android:layout_marginLeft="20dp"                              //设置左间距20dp
    8         android:layout_marginTop="20dp"                               //设置上间距20dp
    9         android:text="第一个按钮" />
    1 <Button
    2         android:id="@+id/button2"
    3         android:layout_width="wrap_content"              //宽度匹配内容
    4         android:layout_height="wrap_content"              //高度匹配内容
    5         android:layout_below="@+id/button1"              //位置在第一个按钮的下面
    6         android:layout_toRightOf="@+id/button1"            //与第一个按钮的右边对齐
    7         android:layout_marginTop="15dp"                            //设置上间距15dp
    8      android:text="第二个按钮" />
    1     <Button
    2         android:id="@+id/button3"
    3         android:layout_width="wrap_content"              //宽度匹配内容
    4         android:layout_height="wrap_content"              //高度匹配内容
    5         android:layout_below="@+id/button2"              //位置在第二个按钮的下面
    6         android:layout_toLeftOf="@+id/button2"            //与第二个按钮的左边对齐
    7         android:layout_marginTop="15dp"                //设置上间距15dp        
    8         android:text="第三个按钮" />

    2、LinearLayout线性布局

      LinearLayout是一种线型的布局方式。LinearLayout布局容器内的组件一个挨着一个地排列起来:不仅可以控制个组件横向排列,也可控 制各组件纵向排列。通过orientation属性设置线性排列的方向是垂直(vertical)还是纵向(horizontal)。

    3、FrameLayout单桢布局

       FrameLayout对象好比一块在屏幕上提前预定好的空白区域,可以将一些元素填充在里面,如图片。所有元素都被放置在FrameLayout区域的最左上区域,而且无法为这些元素制指定一个确切的位置,若有多个元素,那么后面的元素会重叠显示在前一个元素上。

      说明:
      由于 FrameLayout 中后出现的 UI 控件会覆盖前面出现的 UI 控件,每次只能显示一个 UI 控件,因此,我们可以通过在 Activity 中对每次显示的图片内容进行切换以实现动画效果 。 或许你会想到开启一条线程来控制切换 , 但在非主线程中不能更新 UI 界面 , 所以 , 我们使用了Android 提供的消息通讯类 Handler 。该类可以实现非主线程和负责 UI 的主线程之间的通信 ,进而间接实现非主线程更新 UI 界面。由于 sleep 方法中的sendMessageDelayed(obtainMessage(0), delayMillis); 本身会延迟发送一个消息 , 该消息
    会 被框架传递给 handleMessage 事件 。 我们在 handleMessage() 方法中再次调用 sleep() 方法 ,形成一个循环调用 。 在我们对界面进行点击之前 , 两个方法会一直循环调用 。 前景图片也会不断的切换,进而实现动画的效果。

    4、TableLayout表格布局

      TableLayout是指将子元素的位置分配到行或列中。Android的一个TableLayout有许多TableRow组成,每一个 TableRow都会定义一个Row。TableLayout容器不会显示Row,Column,及Cell的边框线,每个Row拥有0个或多个 Cell,每个Cell拥有一个View对象。

      在使用tablelayout时,应注意每一个cell的宽度。

    附:表格布局常见属性介绍

      (1)TableLayout行列数的确定
            TableLayout的行数由开发人员直接指定,即有多少个TableRow对象(或View控件),就有多少行。

            TableLayout的列数等于含有最多子控件的TableRow的列数。如第一TableRow含2个子控件,第二个TableRow含3个,第三个TableRow含4个,那么该TableLayout的列数为4.

      (2)TableLayout可设置的属性详解
      TableLayout可设置的属性包括全局属性及单元格属性。

      a)全局属性也即列属性,有以下3个参数:

      android:stretchColumns    设置可伸展的列。该列可以向行方向伸展,最多可占据一整行。

      android:shrinkColumns     设置可收缩的列。当该列子控件的内容太多,已经挤满所在行,那么该子控件的内容将往列方向显示。

      android:collapseColumns 设置要隐藏的列。

       示例:

      android:stretchColumns="0"           第0列可伸展

      android:shrinkColumns="1,2"         第1,2列皆可收缩

      android:collapseColumns="*"         隐藏所有行

      说明:列可以同时具备stretchColumns及shrinkColumns属性,若此,那么当该列的内容N多时,将“多行”显示其内容。(这里不是真正的多行,而是系统根据需要自动调节该行的layout_height)

      b)单元格属性,有以下2个参数:

      android:layout_column    指定该单元格在第几列显示

      android:layout_span        指定该单元格占据的列数(未指定时,为1)

      示例:

      android:layout_column="1"    该控件显示在第1列

      android:layout_span="2"        该控件占据2列

      说明:一个控件也可以同时具备这两个特性。

     1 <?xml version="1.0" encoding="utf-8"?>
     2 
     3 <TableLayout     
     4     xmlns:android="http://schemas.android.com/apk/res/android"    
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"    
     7     android:stretchColumns="1">
     8   //第一行
     9     <TableRow
    10         android:id="@+id/tableRow1"
    11         android:layout_width="wrap_content"
    12         android:layout_height="wrap_content" >
    13 
    14         <TextView
    15             android:id="@+id/tvUserName"
    16             android:layout_width="wrap_content"
    17             android:layout_height="wrap_content"
    18             android:text="用户名:" />
    19 
    20         <EditText
    21             android:id="@+id/etUserName"
    22             android:layout_width="wrap_content"
    23             android:layout_height="wrap_content"
    24             android:ems="10" >
    25 
    26             <requestFocus />
    27         </EditText>
    28 
    29     </TableRow>
    30     //第二行
    31     <TableRow
    32         android:id="@+id/tableRow2"
    33         android:layout_width="wrap_content"
    34         android:layout_height="wrap_content" >
    35         <TextView 
    36             android:text="登录密码:" 
    37             android:textStyle="bold"
    38             android:gravity="right" 
    39             android:padding="3dp" /> 
    40         <EditText 
    41             android:id="@+id/password" 
    42             android:password="true"
    43             android:padding="3dp" 
    44             android:scrollHorizontally="true" /> 
    45     </TableRow> 
    46   //第三行      
    47     <TableRow
    48         android:id="@+id/tableRow3"
    49         android:layout_width="wrap_content"
    50         android:layout_height="wrap_content" >
    51         <Button 
    52             android:id="@+id/cancel" 
    53             android:text="注册" /> 
    54         <Button 
    55             android:id="@+id/login" 
    56             android:text="登录" /> 
    57     </TableRow>
    58 
    59 </TableLayout>

    5、GridLayout网格布局

      android4.0以上版本出现的GridLayout布局解决了以上问题。GridLayout布局使用虚细线将布局划分为行、列和单元格,也 支持一个控件在行、列上都有交错排列。而GridLayout使用的其实是跟LinearLayout类似的API,只不过是修改了一下相关的标签而已, 所以对于开发者来说,掌握GridLayout还是很容易的事情。GridLayout的布局策略简单分为以下三个部分:

      首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,但是通过指定 android:columnCount设置列数的属性后,控件会自动换行进行排列。另一方面,对于GridLayout布局中的子控件,默认按照 wrap_content的方式设置其显示,这只需要在GridLayout布局中显式声明即可。

           其次,若要指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_column属性即 可,但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开 始,这与编程语言中一维数组的赋值情况类似。

      最后,如果需要设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者 layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数, 后一个设置表明该控件填满所跨越的整行或整列。

      <Button  
            android:id="@+id/zero"  
            android:layout_columnSpan="2"      //列扩展两列
            android:layout_gravity="fill"      //按钮填充满两格
            android:text="0"/>  
    
    <?xml version="1.0" encoding="utf-8"?>  
    <GridLayout                                     //网络布局管理器
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:orientation="horizontal"  			      //水平方向
        android:rowCount="5"                                                  //5行
        android:columnCount="4" >                                             //4列
    

    6、Fragment布局

      Android是在Android 3.0 (API level 11)开始引入Fragment的。

      可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。

      可以把Fragment设计成可以在多个Activity中复用的模块。

      当开发的应用程序同时适用于平板电脑和手机时,可以利用Fragment实现灵活的布局,改善用户体验。

      Fragment生命周期

      因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。

      如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。

      但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。

      当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作

    7、include other layout

  • 相关阅读:
    PHP数组函数(5)
    python3-开发面试题(python)6.24基础篇(3)
    python3开发进阶-Django框架的ORM常用字段和参数
    python3-开发面试题(python)6.23基础篇(2)
    python3 中 and 和 or 运算规律
    python3开发进阶-Django框架中的ORM的常用操作的补充(F查询和Q查询,事务)
    python3-开发面试题(python)6.22基础篇(1)
    python3开发进阶-Django框架中的ORM的常用(增,删,改,查)操作
    python3-os模块中的os.walk(目录树生成器)
    python3开发进阶-Django框架的详解
  • 原文地址:https://www.cnblogs.com/netuml/p/4582809.html
Copyright © 2020-2023  润新知