【笨鸟先飞】android重新学习日记1---布局

Android代码最终生成APK,也就是APP,中文叫应用程序,就是点击桌面的图标,打开的东西。 代码最终是要生成APK的,也是手机上的应用程序。

 

对于直接展示在用户面前的APK,也就是各种常见的,大家知道的APP,在android里面都属于activity类型。

 

Activity是区别于service的,他们的区别是有没有界面,有界面的就是Activity,没有界面的就是service。(不只这一个区别哈)

 

Activity的界面,就是展示给用户的所有东西,但凡用户看到的,都是Activity的界面。

界面的基础就是布局,即 layout

 

布局layout是界面的基础,是android提供的一些排列方法。 如果你有好几张图片,那么这些图片将怎么放置在界面上,这个“怎么”就叫做布局。

 

那么android给予的又有哪些呢?

 

LinearLayoutTableLayoutFrameLayoutRelativeLayoutGridLayoutAbsoluteLayout

其中LinearLayoutFrameLayoutRelativeLayout这三种是常用的,另外三种很少用。

 

先讲一种很少用的AbsoluteLayout,绝对布局,你的每个“东西”,都用其横纵坐标来确定,写坐标,然后就放在哪里。总之观看,感觉非常好用,想放哪里,就放哪里。但是实际上非常难用,原因有二,第一:你无法一次性确定放置坐标,第二不懂手机分辨率不同,这样做,不同手机显示结果完全不同。特别在对齐,排列之间比较烦人。除非你做的APP确实只在一个手机上用,不考虑兼容性和适配性。 也原因话很多时间去计算每个“东西”的坐标,那么还是可以用的。这个布局的好处有两点,第一是,布局直接,如果某种布局真的特别奇葩,直接布局依然能搞定。第二,理解上简单,全是坐标费体力,不费脑力。

 

AbsoluteLayout相对的就是RelativeLayout

 

RelativeLayout的字面意思是相对布局,其含义是你放的一个“东西”可以根据另外一个已经放好的“东西”为坐标。这是一个非常常用的方案,它会使你的布局很容易很好看,而且可以放置出各种花样。

 

比如正中间写名字,在名字下面,就写时间,时间右边写日期,时间下面写地点。名字上面放个图片等等

 

对的,就是上下左右的排列,你会发现在所有手机中都可以使用这一套。想把名字放中间,以名字为坐标,放上图片和时间,又以时间为坐标写上日期和地址。这样就将一个个的“东西”铺展开来,互不干扰。

 

基本上RelativeLayout可以布出基本所有的布局,而且占用空间不多,如果初学者想自己编写一个简单的程序,我建议Layout采用RelativeLayout作为练习。

 

另一种常用的就是LinearLayout,它的特点是非常简单,就是你不用考虑布局,不用设定位置相关信息,它自动帮你排列了。排列出来呈线性可以从上到下,也可以从左到右,非常简单。它的优势就是简单,在使用LinearLayout的时候,我现在认为有两种情况用的比较普遍。

 

第一种,表格形简单摆列的界面。举个例子,做一个电子书,其中有一个界面是目录,这个目录明显是从上往下,规则排列,那么就可以采用LinearLayout。 这种简单排列用的地方还是很多。

 

第二种,作为一个局部界面,使用LinearLayout(线性布局),在这个局部里面他是线性的,而整体是多样化的。这里就涉及到一个嵌套。在学习Layout的时候,应该都知道,在Layout里面放的“东西”,会出现在布局中。而一个Layout可以作为一个“东西”放在另外一个Layout里面。这样的话,就可以把小范围内的规则排序,用LinearLayout,放置在大范围不规则排序RelativeLayout中。

 

最后再说一下FrameLayout(帧布局)FrameLayout也是方框布局,你放入的每个都行,实际都是方块形状的。即使放一个球形图标,在FrameLayout里面,也是一个方块,不过周围是透明的,中间的球形有颜色。

 

某种情况下,FrameLayout是介于LinearLayoutRelativeLayout之间的,这描述并不准确,但对于初学者我们可以这样理解。

 

FrameLayout布局操作上比LinearLayout要繁琐一些,但是没有RelativeLayout那么繁琐。RelativeLayout是属于每一个“东西”都要认真考虑其关系。FrameLayout则少一些。

 

从代码的角度来理解一下,线性布局和帧布局所用的布局相关代码,主要是gravatyweight两者,而相对布局有通过boolean类的类似绝对布局的控制码,以及通过id(其他布局中已有的“东西”)识别其他位置。

 

RelativeLayout可用布局代码更多,在使用时,也更加复杂, 你必须去对每个东西都进行详细的设置。 设置内容也相对繁琐。

 

所以在设计较为复杂的布局的时候,首先建议使用嵌套,并不是一个布局吃到底,用RelativeLayout太复杂,10来个“东西”就可以让你写上100行代码,重复性还很高,而一般界面可以有好几十个东西。

 

其次,仅用FrameLayout或仅用LinearLayout,对于有错位的布局,基本做不下来。

 

所以使用嵌套,比如首先以一个FrameLayout作为Layout整体布局,里面大概也就划分几个区域。比如以我正在写的wsp为例,在android中,就已FrameLayout,划分6个区域,非常简单,然后对于6号区域,我们以LinearLayout

 【笨鸟先飞】android重新学习日记1---布局

1号区域则,在使用一个FrameLayout划分一下,里面每个小区域,则采用RelativeLayout进行详细布局。

 

 

嵌套时在整体FrameLayout布局中,1号的FrameLayout6号的LinearLayout都是以“东西”的形式放在FrameLayout布局中的。

 

那么什么是“东西”呢?  “东西”是布局里面的组成部分,其xml代码结构:

 

<布局类型>

<东西1

东西1的各种参数

/>

 

<东西2

东西2的各种参数

/>

 

<东西3

东西3的各种参数

/>

 

</布局类型>

 

东西主要有一下三类 android自带组件、用户自定义组件、嵌套的布局。

 

以上三类可以统做组件,界面的组成部分,在布局的框架中实现。

 

关于组件明天继续学习。