`
wangking717
  • 浏览: 262592 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Android五种布局模式

 
阅读更多
 
Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:LinearLayout(线性布局),FrameLayout(框架布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

 

 

一、LinearLayout
    线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
    LinearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。


二、FrameLayout
    FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。   


三、AbsoluteLayout
    AbsoluteLayout 这个布局方式很简单,主要属性就两个 layout_x 和 layout_y 分别定义 这个组件的绝对位置。 即,以屏幕左上角为(0,0)的坐标轴的x,y值,当向下或向右移动时,坐标值将变大。AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。我们通常不推荐使用 AbsoluteLayout ,除非你有正当理由要使用它,因为它使界面代码太过刚性,以至于在不同的设备上可能不能很好地工作。

 

四、RelativeLayout
    相对布局可以理解为某一个元素为参照物,来定位的布局方式。

            android:layout_方向 = id  表示 在这个id对应的控件的方向上(上|下)

            android:layout_align方向  = id 表示和这个控件的(上下左右)对齐

            android: layout_to方向Of  = id 表示在这个控件的 左或者右
    eg:

            android:layout_below="@id/la1"
            将当前控件放置于id为la1 的控件下方。


            android:layout_alignParentRight="true"
            使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。


            android:layout_marginLeft="10dip"
            使当前控件左边空出相应的空间。


             android:layout_toLeftOf="@id/true"
             使当前控件置于id为true的控件的左边。


             android:layout_alignTop="@id/ok"
             使当前控件与id为ok的控件上端对齐。

 

五、TableLayout

    表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每个TableRow 都会定义一个 row (事实上,你可以定义其它的子对象,这在下面会解释到)。TableLayout 容器不会显示row 、cloumns 或cell 的边框线。每个 row 拥有0个或多个的cell ;每个cell 拥有一个View 对象。表格由列和行组成许多的单元格。表格允许单元格为空。单元格不能跨列,这与HTML 中的不一样。

    TabRow只论行,不论列(列自定义)。

 

每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。

    例子:


        

 

    1 线性布局(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">
    <Button android:text="Up" 
        android:id="@+id/Button03" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"></Button>
        
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">        
    <Button android:text="left" 
        android:id="@+id/Button01" 
        android:width="120px"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"></Button>    
    <Button 
        android:text="right" 
        android:id="@+id/Button02" 
        android:width="120px"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"></Button>
    </LinearLayout>
</LinearLayout>

 
    2、 表格布局(TableLayout)


   

    描述:类似于HTML table ,在其中间添加View 或是<TableRow></TableRow>控件。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/TableLayout01"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TableRow android:gravity="center">
      <Button 
            android:text="@+id/Button01" 
            android:id="@+id/Button01" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
       </Button>
    </TableRow>
    <TableRow android:gravity="center">
        <TextView android:text="第一行第0列" 
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content"></TextView>
        <TextView android:text="第一行第1列" 
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content"></TextView>
    </TableRow>
     <TableRow android:gravity="center">
        <TextView android:text="第二行第0列" 
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content"></TextView>
        <TextView android:text="第二行第1列" 
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content"></TextView>
    </TableRow>
</TableLayout>

 
     3、 单帧布局(FrameLayout)


     

     描述:类似于HTML层叠

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
    <ImageView 
        android:id="@+id/ImageView01"
        android:src="@drawable/circle_blue"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </ImageView>
    <ImageView 
        android:id="@+id/ImageView02"
        android:src="@drawable/circle_green"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </ImageView>
    <ImageView 
        android:id="@+id/ImageView03"
        android:src="@drawable/circle_red"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </ImageView>
    
</FrameLayout>

 
    4、 相对布局(RelativeLayout)


   

    描述:取决于对参照控件进行布局,父控件和子控件均可

 

    常用属性:

    android:layout_centerInParent=”true/false”        

    android:layout_above, android:layout_below

    android:layout_alignleft, android:layout_alignright.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
     <Button
          android:id="@+id/btnmiddle"
          android:text="MiddleButton"
          android:layout_width="200px"
          android:layout_height="wrap_content"
          android:layout_centerInParent="true">     
     </Button>
      <Button
          android:id="@+id/btnup"
          android:text="UpButton"
          android:layout_width="100px"
          android:layout_height="wrap_content"          
          android:layout_above="@id/btnmiddle"
          android:layout_alignLeft="@id/btnmiddle">     
     </Button>
      <Button
          android:id="@+id/btndown"
          android:text="downButton"
          android:layout_width="100px"
          android:layout_height="wrap_content"          
          android:layout_below="@id/btnmiddle"
          android:layout_alignRight="@id/btnmiddle">     
     </Button>
</RelativeLayout>

 

    5、 坐标布局(AbsoluteLayout)

 
    

    描述:对其控件进行直接定位,增加灵活性。

    常用属性:android:layout_x、android:layout_y

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  
  <TextView 
       android:layout_width="wrap_content" 
       android:text="UserName:" 
       android:layout_height="wrap_content" 
       android:id="@+id/tvName" 
       android:layout_y="20dip" 
       android:layout_x="50dip">
       </TextView>
   <TextView 
       android:layout_width="wrap_content" 
       android:text="Password:" 
       android:layout_height="wrap_content" 
       android:id="@+id/tvPassword" 
       android:layout_y="100dip" 
       android:layout_x="55dip">
       </TextView>
       
   <EditText
       android:layout_width="150px" 
       android:layout_height="wrap_content" 
       android:id="@+id/tvPassword" 
       android:layout_y="10dip" 
       android:layout_x="120dip">
       </EditText>
   <EditText
       android:layout_width="150px" 
       android:layout_height="wrap_content" 
       android:id="@+id/tvPassword" 
       android:layout_y="90dip" 
       android:layout_x="120dip">
       </EditText>
</AbsoluteLayout>

 

    MyLayout.java

 

package com.jay.Layout;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyLayout extends Activity {
    /** Called when the activity is first created. */
    private Button btnLinearlayout;

    private Button btnTablayout;

    private Button btnRelativelayout;

    private Button btnFramelayout;

    private Button btnAbsolutelayout;

    OnClickListener listener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        CreateControl();

        listener = new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                switch (v.getId()) {
                    case R.id.btnlinearlayout:
                        setTitle("线性布局");
                        setContentView(R.layout.linearlayout);
                        break;
                    case R.id.btntableayout:
                        setTitle("表格布局");
                        setContentView(R.layout.tablelayout);
                        break;
                    case R.id.btnrelativelayout:
                        setTitle("相对布局");
                        setContentView(R.layout.relativelayout);
                        break;
                    case R.id.btnfreamelayout:
                        setTitle("单帧布局");
                        setContentView(R.layout.framelayout);
                        break;
                    case R.id.btnabsolutelayout:
                        setTitle("坐标布局");
                        setContentView(R.layout.absolutelayout);
                        break;
                }
            }
        };
        btnLinearlayout.setOnClickListener(listener);
        btnTablayout.setOnClickListener(listener);
        btnRelativelayout.setOnClickListener(listener);
        btnFramelayout.setOnClickListener(listener);
        btnAbsolutelayout.setOnClickListener(listener);
    }

    private void CreateControl() {
        // TODO Auto-generated method stub
        btnLinearlayout = (Button)findViewById(R.id.btnlinearlayout);
        btnTablayout = (Button)findViewById(R.id.btntableayout);
        btnRelativelayout = (Button)findViewById(R.id.btnrelativelayout);
        btnFramelayout = (Button)findViewById(R.id.btnfreamelayout);
        btnAbsolutelayout = (Button)findViewById(R.id.btnabsolutelayout);
    }
}

 

  • 大小: 24 KB
  • 大小: 12.6 KB
  • 大小: 11.8 KB
  • 大小: 8.2 KB
  • 大小: 14.7 KB
  • 大小: 12 KB
分享到:
评论

相关推荐

    Android-23种设计模式

    本资料包涵盖了23种经典的设计模式,旨在帮助Android开发者深入理解和应用这些模式。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。在Android中,单例常用于系统服务或应用配置的管理。...

    Android情景模式布局实现

    在Android应用开发中,情景模式布局的实现是一个重要的设计元素,它允许用户根据不同的场景或需求来调整应用程序的显示和行为。本篇文章将深入探讨如何使用TabHost组件和Intent对象来构建一个灵活的情景模式布局。 ...

    android ListView 网格布局

    它的网格布局模式使得数据以多列的形式展示,增强了界面的可读性和用户体验。本文将深入探讨如何在Android中实现一个基于ArrayAdapter的网格布局ListView。 首先,我们要了解ListView的基本结构。ListView是由多个...

    Android Tablayout 自定义Tab布局的使用案例

    本文将 introduction 了 Android Tablayout 自定义 Tab 布局的使用案例,包括 Tablayout 的基本使用、自定义 Tab 布局、设置 Tab 的 padding、滚动模式等。 一、Tablayout 的基本使用 Tablayout 是 Android 设计库...

    android框架布局demo

    在Android开发中,布局...通过下载并研究"android框架布局demo",你将有机会亲手实践这些概念,进一步加深对Android布局管理的理解,并提高你的应用开发技能。记得不断探索和尝试,让自己的应用界面更加精美和高效。

    android第三章基本组件与布局模式

    接着,FrameLayout是Android的一种布局模式,它允许子视图覆盖彼此。在3.2的项目中,我们创建了一个FrameLayout,并通过`new FrameLayout(this)`实例化。然后,我们可以添加TextView到FrameLayout中,使用`addView()...

    Android 标签流式布局

    这种布局模式在许多应用中都有所应用,如新闻阅读应用的分类标签、设置菜单的选项标签等。在本篇文章中,我们将深入探讨如何实现这样的布局,并通过具体的代码示例来展示其实现过程。 首先,我们来理解一下“标签”...

    android 自定义view流式布局

    在此方法中,遍历所有子视图,根据它们的测量模式和大小,计算出流式布局的总宽度和高度。 4. 重写布局方法:接着,我们需要重写`onLayout()`方法,根据测量的结果,为每个子视图指定位置。在这个过程中,我们需要...

    android 动态添加布局

    在Android开发中,动态添加布局是一项常见的需求,特别是在创建自定义列表、瀑布流视图或者进行界面动态更新时。本文将深入探讨如何实现"android 动态添加布局",并结合"FlowTagLayoutDemo-master"这个示例项目,...

    Android 开发五大布局案例使用

    本文将深入探讨Android的五大布局:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)以及约束布局(ConstraintLayout),并结合案例来帮助初学者更好地理解...

    Android 日间/夜间模式 主题切换

    ThemeDemo日夜间模式切换,页面切换的时候附带动画特效, 关于多主题实现的,大牛这里的做法是继承...布局中直接使用 Android 默认的控件就可以.在解析以后会根据控件转换成支持主题切换的控件.解放冗余的名称.

    Android 流式布局,标签页

    在Android开发中,为了提供更好的用户体验,我们常常需要创建各种各样的布局来展示内容,其中“流式布局”(FlowLayout)和“标签页”(TabLayout)是两种常见的设计模式。流式布局允许元素自动调整位置,从左到右...

    Android布局管理器

    【Android布局管理器】是Android应用开发中的核心概念,它决定了UI组件在屏幕上的排列方式。在Android中,布局管理器主要有五种类型:线性布局(LinearLayout)、表格布局(TableLayout)、相对布局(RelativeLayout...

    android软键盘把布局顶上去问题

    另一种选择是`android:windowSoftInputMode="adjustResize"`,它会让整个布局缩小,以便为软键盘腾出空间,但可能会导致部分布局被键盘遮挡。 2. **自定义布局**: 创建一个自定义的全屏布局,监听键盘的显示与...

    android布局属性总结文档

    以下是对几种主要布局及其关键属性的详细说明: **LinearLayout**: 这是最基础的布局,可以将子视图按照垂直或水平方向排列。`android:orientation`属性决定了排列方向。`android:layout_gravity`则用于设置子视图...

    Android卡片布局实现

    在Android应用开发中,卡片布局(Card View)是一种常见的UI设计模式,用于呈现信息块,使其看起来像一张张卡片,以此提升用户体验并增加界面的视觉吸引力。卡片布局通常包含一个标题、内容以及可能的附加信息,如...

    Android开发-RecyclerView-AndroidStudio(三)瀑布流和几种布局

    本篇主要介绍如何在Android Studio中使用RecyclerView实现瀑布流布局以及常见的几种布局模式。 首先,RecyclerView的核心在于它的适配器(Adapter)和布局管理器(LayoutManager)。适配器负责将数据集绑定到视图上...

    FlowTag-Android流式布局,支持点击、单选、多选,支持初始化选中标签(只针对单选和多选模式),适合用于产品标签等,用法采用Adapter模式,和ListView、G.zip

    Android流式布局,支持点击、单选、多选等,适合用于产品标签等,用法采用Adapter模式,和ListView、GridView用法一样!2016/6/26号新添加初始化标签功能,使用非常简单,只要你的Adapter实现OnInitSelectedPosition...

    android动态布局

    在Android开发中,动态布局(Dynamic Layout)是一种根据设备特性、用户交互或程序运行时的数据变化来构建和更新用户界面的技术。动态布局可以帮助开发者创建适应不同屏幕尺寸、方向和分辨率的应用,提供更好的用户...

Global site tag (gtag.js) - Google Analytics