`
jakielong
  • 浏览: 229285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android的几种布局方式

阅读更多

通常我们开发的应用程序都是需要具有友好的用户界面,那么Android中提供了哪些布局方式呢?当我们构思好了所需要的各种控件的时候,怎样才能将它们放到Android设备屏幕上正确的位置呢?Android中,Layout是负责管理控件在屏幕的位置的类,并且提供了几个简单的布局模型,开发人员通过将这几种布局模型的组合可以构建出我们想要的复杂的用户界面.

(主界面程序列出五种基本的布局方式,选择各种布局可以查看效果)

1、 线性布局

    线性布局方式是我们应用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,在主界面中点击LinearLayout选项,将会进入线性布局效果显示界面,如下图:

查看该布局界面文件,如下所示:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="fill_parent"> <TextView android:text="Admin Login" android:paddingTop="20dip" android:paddingBottom="20dip" android:textColor="@color/blue" android:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:soundEffectsEnabled="true" android:password="false" android:textStyle="bold"> </TextView> <LinearLayout android:id="@+id/layout1" android:gravity="center" android:paddingBottom="20dip" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/txtName" android:text="Name" android:minWidth="80dip" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <EditText android:id="@+id/edtName" android:minWidth="120dip" android:layout_width="fill_parent" android:layout_height="wrap_content" > </EditText> </LinearLayout> <LinearLayout android:id="@+id/layout2" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/txtPsw" android:minWidth="80dip" android:gravity="center" android:text="password" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <EditText android:id="@+id/edtPassword" android:minWidth="120dip" android:layout_width="fill_parent" android:layout_height="wrap_content" > </EditText> </LinearLayout> <LinearLayout android:id="@+id/layout3" android:gravity="right" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/btnOk" android:minWidth="70dip" android:text="O K" android:layout_width="wrap_content" android:layout_height="wrap_content" > </Button> <Button android:id="@+id/btnCancel" android:minWidth="70dip" android:text="Cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" > </Button> </LinearLayout> </LinearLayout>


 从上述我们可以看出,通过灵活的组合LinearLayout布局方式,可以很容易的设计出复杂的一些界面。如下图所示:

 

2 坐标布局

 

     坐标布局对于有过.Net Winform开发经验的人员来说应该比较熟悉了,即控件的在父容器上所处的位置主要是有其横纵坐标决定的~在坐标布局中,坐标系如下所示:

 

对于该布局的示例效果,笔者主要是通过按左右键来控制小人左右移动来讲解的,如下图:

 

界面布局内容如下: 

<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/AbsoluteLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/txtIntro" android:text="按左右键控制小人运动" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_x="20dip" android:layout_y="20dip"> </TextView> <ImageView android:id="@+id/imgMan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="100dip" android:layout_y="100dip"> </ImageView> </AbsoluteLayout>


 实现控制小人左右走动的动画代码在AbsoluteLayoutActivity.java文件中,内容如下:

 

 

 

package cnblogs.com.layout; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.KeyEvent; import android.widget.ImageView; import cnblogs.com.R; public class AbsoluteLayoutActivity extends Activity{ //人物的View private ImageView man; //人状态的枚举 public enum ManState{ Stand, LeftRun, LeftStop, RightRun, RightStop }; //人当前的状态 private ManState curState=ManState.Stand; private int dx; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.absolute); man=(ImageView)this.findViewById(R.id.imgMan); man.setBackgroundResource(R.drawable.manstand); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { boolean ret=super.onKeyDown(keyCode, event); switch(keyCode){ case KeyEvent.KEYCODE_DPAD_LEFT: if(curState==ManState.LeftRun){ curState=ManState.LeftStop; man.setBackgroundResource(R.drawable.manleftstop); } else if(curState==ManState.LeftStop){ curState=ManState.LeftRun; man.setBackgroundResource(R.drawable.manleftrun); } else{ curState=ManState.LeftRun; man.setBackgroundResource(R.drawable.manleftrun); } //碰撞检测 dx=man.getLeft()-1>0?man.getLeft()-1:0; man.layout(dx, man.getTop(), dx+Math.abs(man.getWidth()), man.getTop()+Math.abs(man.getHeight())); break; case KeyEvent.KEYCODE_DPAD_RIGHT: if(curState==ManState.RightRun){ curState=ManState.RightStop; man.setBackgroundResource(R.drawable.manrightstop); } else if(curState==ManState.RightStop){ curState=ManState.RightRun; man.setBackgroundResource(R.drawable.manrightrun); } else{ curState=ManState.RightRun; man.setBackgroundResource(R.drawable.manrightrun); } //碰撞检测 dx=man.getLeft()+1<360-man.getWidth()?man.getLeft()+1:new DisplayMetrics().widthPixels-man.getWidth(); man.layout(dx, man.getTop(), dx+Math.abs(man.getWidth()), man.getTop()+Math.abs(man.getHeight())); break; default: break; } return ret; } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { boolean ret=super.onKeyUp(keyCode, event); return ret; } }

  从这个例子可以看出,实现帧动画的一种方式就是通过不断的改变ImageView控件的横纵坐标,同时更换背景图片即可。

3 表格布局        

        表格布局主要以行列的形式来管理子控件,其中每一行即一个TableRow对象,每个TableRow对象可以添加子控件,并且每加入一个空间即相当于添加了一列。本文中的示例效果如下所示: 

表格界面布局文件内容如下:    

 

<?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="wrap_content"> <!-- 隐藏第2,3,4列 --> <TableLayout android:id="@+id/table1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:collapseColumns="1,2,3" > <TextView android:id="@+id/txt1" android:gravity="center" android:text="Table1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TableRow> <TextView android:text="col0"></TextView> <TextView android:text="col1"></TextView> <TextView android:text="col2"></TextView> <TextView android:text="col3"></TextView> </TableRow> </TableLayout> <!-- 设置第二列可伸展,过长可将后面的列挤出可使区 --> <TableLayout android:id="@+id/table2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="1" > <TextView android:id="@+id/txt2" android:gravity="center" android:text="Table2" android:layout_width="fill_parent" android:layout_height="wrap_content" > </TextView> <TableRow> <TextView android:text="col0"></TextView> <TextView android:text="col1"></TextView> <TextView android:text="col2"></TextView> <TextView android:text="col3"></TextView> </TableRow> </TableLayout> <!-- 设置第一列可以收缩 --> <TableLayout android:id="@+id/table3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:shrinkColumns="0" > <TextView android:id="@+id/txt3" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Table3" > </TextView> <TableRow> <TextView android:text="welcome to world of android"></TextView> <TextView android:text="col1"></TextView> <TextView android:text="col2"></TextView> <TextView android:text="col3"></TextView> </TableRow> </TableLayout> <!-- 对各列未作设置,即不可伸缩 --> <TableLayout android:id="@+id/table4" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/txt3" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Table4" > </TextView> <TableRow> <TextView android:text="col0"></TextView> <TextView android:text="this column will be very long"></TextView> <TextView android:text="col2"></TextView> <TextView android:text="col3"></TextView> </TableRow> </TableLayout> </LinearLayout>

 

展开上述布局内容,最外层是一个垂直布局的LinearLayout的,在其中有四个TableLayout布局,分别展示了四种不同类型的TableLayout布局方式。

 

 

4、 相对布局

             

5、 帧布局

           点击FrameLayout选项,将会进入帧布局效果显示界面,如下图: 

上图看上去是不是有点不自然,这是因为上图是通过两个ImageView图片显示控件将两张图片叠在一起显示的。先看下布局界面是怎么编写的: 

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/FrameLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/img1" android:src="@drawable/shirt" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> <ImageView android:id="@+id/img2" android:paddingLeft="100dip" android:paddingTop="18dip" android:src="@drawable/head1" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> </FrameLayout>


 可见第一个ImageView控件显示的是T-shirt图片,而第二个ImageView控件则是显示我爱罗的头像。需要注意的是,在帧布局中,先添加的图片会被后添加的图片覆盖。

 

未完待续~ 

转自:http://www.cnblogs.com/royenhome/archive/2010/05/06/1729297.html

 

 

 

 

分享到:
评论

相关推荐

    Android 五大布局方式详解

    Android中常用的5大布局方式有以下几种:...线性布局是Android开发中最常见的一种布局方式,它是按照垂直或者水平方向来布局,通过“android:orientation”属性可以设置线性布局的方向。属性值有垂直(vertical)和水平

    android 五大布局详解

    这些布局对象是 Android 应用程序开发中最基本和最常用的布局方式。 FrameLayout FrameLayout 是最简单的一个布局对象。它被定制为屏幕上的一个空白备用区域,之后可以在其中填充一个单一对象 — 比如,一张要发布...

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

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

    android的layout布局种类

    Android 提供了多种布局种类,每种布局种类都有其特点和用途。在这篇文章中,我们将详细介绍 Android 中的五种常见布局种类:LinearLayout、AbsoluteLayout、RelativeLayout、FrameLayout 和 TableLayout。 一、...

    Android开发view的几种布局方式[定义].pdf

    下面将详细讲解Android中主要的四种布局:线性布局、相对布局、表格布局和列表视图。 1. **线性布局 (LinearLayout)** 线性布局是最基础的布局方式,按照垂直或水平方向排列子视图。通过`android:orientation`属性...

    Android 动态解析布局

    总的来说,Android的动态解析布局提供了一种强大的方式来构建灵活且可自定义的用户界面。然而,开发者需要注意性能和安全性,以确保应用的稳定性和用户的安全。通过熟练掌握这一技术,你可以创建更复杂、更适应不同...

    android ListView 网格布局

    总结起来,创建一个Android的网格布局ListView主要涉及以下几个步骤:设计网格项布局、创建自定义Adapter、在Activity中设置GridView并加载数据。通过灵活地调整布局和Adapter,你可以实现各种复杂的网格布局效果。...

    Android 实现流式布局的几种方式和FlexboxLayout的使用_qq_36699930的博客-程序员资料

    本文将深入探讨实现流式布局的几种方法,并特别关注`FlexboxLayout`的使用,这是一种基于Web的Flex布局模型在Android平台上的实现。 首先,我们来了解传统的Android布局方式,如LinearLayout、RelativeLayout和...

    Android多页面布局

    在Android应用开发中,构建多页面布局是一种常见的需求,它能提供丰富的用户体验并允许用户在不同的内容之间平滑切换。本篇文章将详细讲解如何利用Fragment和ViewPager实现这一目标。 首先,Fragment是Android SDK...

    Android瀑布流布局实现

    这种布局方式模仿了瀑布流水的效果,使得内容在屏幕上以不规则的多列形式自上而下排列,每列的高度根据内容自适应。在Android平台上实现瀑布流布局,可以通过多种方式,比如使用第三方库或自定义布局。 首先,我们...

    android常用布局的使用

    本文将深入探讨Android中常见的几种布局及其使用方法,以帮助开发者更好地构建美观且功能丰富的应用程序。 一、线性布局(LinearLayout) 线性布局是最基础的布局类型,它按照垂直或水平方向将子视图排列。通过设置...

    Android开发——布局管理

    首先,Android提供了几种内置的布局类型,以满足不同设计需求: 1. **线性布局(LinearLayout)**:这是最基础的布局,支持水平或垂直方向的单行或单列排列。通过`android:orientation`属性设置排列方向。 2. **...

    android的布局文件介绍

    本篇文章将详细讲解Android的几种布局方式,包括线性布局、相对布局、表格布局、网格视图、标签布局、列表视图以及已废弃的绝对布局。 1. **线性布局(Linear Layout)** 线性布局是最基础的布局方式,它可以按照...

    android界面布局

    本文将深入探讨几种常见的Android布局方式:LinearLayout、RelativeLayout、TableLayout、AbsoluteLayout以及FrameLayout。 1. **LinearLayout(线性布局)**: 线性布局是最基础的布局方式,分为水平和垂直两种...

    Android 开发之旅:详解view的几种布局方式及实践

    【Android 开发之旅:详解view的几种布局方式及实践】 在Android应用开发中,构建用户界面至关重要,而View和ViewGroup是构建用户界面的基础。View是Android系统中表示用户界面的基本元素,而ViewGroup则作为容器,...

    android布局属性总结文档

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

    android六边形布局

    在Android中实现六边形布局,通常有以下几种方法: 1. 自定义View:开发者可以创建一个继承自`View`或`ViewGroup`的类,重写`onDraw()`方法,通过Canvas进行图形绘制,实现六边形的形状。同时,需要处理触摸事件和...

    4种常用android主界面布局

    项目包括了市面上常用的4种主界面布局, 1. viewpager 2. fragment 3. viewpager+fragment 4. 新闻布局

    Android 瀑布流布局库源码

    瀑布流布局在Android应用开发中是一种常见的展示方式,尤其在电商、社交等应用中用于商品或图片的展示。它的特点是视图元素不均匀分布,像瀑布一样从上至下流淌,每一行的列数可能不同,形成一种错落有致的效果。在...

    Android开发 相对布局练习

    相对布局(RelativeLayout)是Android提供的一种布局方式,它允许视图相对于其他视图进行定位,从而实现灵活多样的界面设计。本练习项目是一个简单的石头剪刀布游戏,通过使用相对布局,初学者可以深入理解其工作...

Global site tag (gtag.js) - Google Analytics