浅谈Android布局样式

初学android,感觉还是比较轻松的。当然,如果没有好好的去在自己的电脑上实现的话,估计也会搞得自己稀里糊涂的。下面是我在学习Android布局样式的一些总结(个人这样认为),当然,在其中也借鉴了其他的学习资料,现在与大家分享一下。学习中,我分别学习了Android的四种布局样式分别为:

1.LinearLayout(线性布局)

2.RelativeLayout (相对布局)

3.TableLayout (表格布局)

4.FrameLayout (帧布局)

下面逐一介绍一下:

1.LinearLayout(线性布局)

“ LinearLayout”翻译成中文是“线性布局”,所谓线性布局就是在该标签下的所有子元素会根据其 orientation 属性的值来决定是按行或者是按列逐个显示。

示例main.xml布局文件如下:

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android"http://schemas.android.com/apk/res/android"
  4. android:orientation="vertical"
  5. android:layout_width="fill_parent"
  6. android:layout_height="fill_parent"
  7. >
  8. <TextView
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="@string/name_text"
  12. />
  13. <EditText
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"/>
  16. <Button
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:text="@string/cancle_button"
  20. />
  21. <Button
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:text="@string/ok_button"/>
  25. </LinearLayout>

其对应 strings.xml 内容如下:

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="hello">HelloWorld,UIActivity!</string>
  4. <stringname="app_name">用户界面</string>
  5. <stringname="name_text">请输入用户名</string>
  6. <stringname="ok_button">确定</string>
  7. <stringname="cancle_button">取消</string>
  8. </resources>

运行后,如下图:


“ xmlns:android ”指定命名空间,顶级元素必须指定命名空间。而在该命名空间中的控件的属性如 layout_width ,要在属性前加上“android :”做前缀。

“ layout_width ”指定该元素的宽度,可选值有三种,“ fill_parent ”、“ wrap_content ”、具体数字(单位为 px )。其中“ fill_parent ”代表填满其父元素,对于顶级元素来说,其父元素就是整个手机屏幕。“ wrap_content ”代表该元素的大小仅包裹其自身内容,而数字则代表其占相应的 px 。

“ layout_height ”指定该元素的高度,可选参数值与“ layout_width ”的参数意义相同。

“ orientation ”指定子元素排列方式,其中指定为“ vertical ”则是子元素垂直排列,每个子元素会占独立的一行,如上图,而另一个可选值为“ horizontal ”代表子元素水平排列,即每个子元素会占独立的一列。示例 main.xml 布局文件如下。其对应的

strings.xml 内容不变。

view plain
  1. main.xml
  2. <?xmlversion="1.0"encoding="utf-8"?>
  3. <LinearLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. android:orientation="horizontal"
  6. android:layout_width="fill_parent"
  7. android:layout_height="fill_parent"
  8. >
  9. <TextView
  10. android:layout_width="wrap_content"
  11. android:layout_height="fill_parent"
  12. android:text="@string/name_text"
  13. />
  14. <EditText
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"/>
  17. <Button
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="@string/cancle_button"
  21. />
  22. <Button
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:text="@string/ok_button"/>
  26. </LinearLayout>

运行后,如下图:


2.RelativeLayout (相对布局)

相对布局中的视图组件是按相互之间的相对位置来确定的, 并不是线性布局中的必须

按行或按列单个显示。示例布局文件如下:

main.xml

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/name_text"
  11. android:id="@+id/text"/>
  12. <EditText
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"
  15. android:layout_below="@id/text"
  16. android:id="@+id/edit"/>
  17. <Button
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="@string/cancle_button"
  21. android:layout_alignParentRight="true"
  22. android:layout_below="@id/edit"
  23. android:id="@+id/cancle"/>
  24. <Button
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:layout_toLeftOf="@id/cancle"
  28. android:layout_alignTop="@id/cancle"
  29. android:text="@string/ok_button"/>
  30. </RelativeLayout>

说明:

android:layout_below="@id/text" :将该元素放到 id 为 text 的元素的下面

android:layout_toLeftOf="@id/ok" :放到 id 为 ok 的元素左边

android:layout_alignTop="@id/ok" :对齐 id 为 ok 的元素的顶部

还有很多关于相对位置的字段,希望大家能够自己去发现

界面效果如图:


案例二:梅花效果

问题:利用相对布局实现下面的效果


案例分析:

我们可以从途中看出,四周的方框的角都与中间的方框相连,而且呈现出X字样.试想,中间的是不是有什么特殊含义?

好,养我们做一个假设:假设中间的方框为相对对象,那么各个方框如何表示呢?拿左上角的方框为例,它的位置是:既中间方框的上面又是中间方框的左边.好,那么其他的是不是可以同样再这样表示呢?答案是肯定的.按照这个思路,我们试着把代码写出来:

main.xml

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <TextView
  6. android:id="@+id/center"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:layout_centerInParent="true"
  10. android:background="@drawable/meihua"/>
  11. <TextView
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_above="@id/center"
  15. android:layout_toLeftOf="@id/center"
  16. android:background="@drawable/meihua"/>
  17. <TextView
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:layout_above="@id/center"
  21. android:layout_toRightOf="@id/center"
  22. android:background="@drawable/meihua"/>
  23. <TextView
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:layout_below="@id/center"
  27. android:layout_toLeftOf="@id/center"
  28. android:background="@drawable/meihua"/>
  29. <TextView
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"
  32. android:layout_below="@id/center"
  33. android:layout_toRightOf="@id/center"
  34. android:background="@drawable/meihua"/>
  35. </RelativeLayout>

运行图为:


android:layout_centerInParent="true" 图片垂直水平居中

android:background="@drawable/meihua"将该元素的id放到background下,"meihua"是我拷入的图片文件


3.TableLayout (表格布局)

表格布局的风格跟 HTML 中的表格比较接近,只是所采用的标签不同。

□<TableLayout > 是顶级元素,采用的是表格布局

□ <TableRow> 定义一个行

□ <TextView > 定义一个单元格的内容

示例main.xml布局文件内容如下:

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <TableLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:stretchColumns="0,1,2,3"
  7. >
  8. <TableRow>
  9. <TextView
  10. android:text="@string/name"
  11. android:gravity="center"
  12. android:padding="3dip"/>
  13. <TextView
  14. android:text="@string/gender"
  15. android:gravity="center"
  16. android:padding="3dip"/>
  17. <TextView
  18. android:text="@string/age"
  19. android:gravity="center"
  20. android:padding="3dip"/>
  21. <TextView
  22. android:text="@string/phonenum"
  23. android:gravity="center"
  24. android:padding="3dip"/>
  25. </TableRow>
  26. <TableRow>
  27. <TextView
  28. android:text="@string/name1"
  29. android:gravity="center"
  30. android:padding="3dip"/>
  31. <TextView
  32. android:text="@string/gender1"
  33. android:gravity="center"
  34. android:padding="3dip"/>
  35. <TextView
  36. android:text="@string/age1"
  37. android:gravity="center"
  38. android:padding="3dip"/>
  39. <TextView
  40. android:text="@string/phonenum1"
  41. android:gravity="center"
  42. android:padding="3dip"/>
  43. </TableRow>
  44. <TableRow>
  45. <TextView
  46. android:text="@string/name2"
  47. android:gravity="center"
  48. android:padding="3dip"/>
  49. <TextView
  50. android:text="@string/gender1"
  51. android:gravity="center"
  52. android:padding="3dip"/>
  53. <TextView
  54. android:text="@string/age2"
  55. android:gravity="center"
  56. android:padding="3dip"/>
  57. <TextView
  58. android:text="@string/phonenum2"
  59. android:gravity="center"
  60. android:padding="3dip"/>
  61. </TableRow>
  62. </TableLayout>

□ android:stretchColumns="0,1,2,3"

该属性指定每行都由第“ 0 、 1 、 2 、 3 ”列占满空白空间。

□ gravity 指定文字对齐方式,案例都设为居中对齐。

□ padding 指定视图与视图内容间的空隙,单位为像素。

对应的 strings.xml 文件内容如下:

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="name">姓名</string>
  4. <stringname="gender">性别</string>
  5. <stringname="age">年龄</string>
  6. <stringname="phonenum">电话</string>
  7. <stringname="gender1"></string>
  8. <stringname="gender2"></string>
  9. <stringname="name1">张三</string>
  10. <stringname="age1">25</string>
  11. <stringname="phonenum1">1234567</string>
  12. <stringname="name2">李四</string>
  13. <stringname="age2">24</string>
  14. <stringname="phonenum2">7654321</string>
  15. </resources>

界面效果如下:


4.FrameLayout (帧布局)

帧布局中的每一个组件都代表一个画面,默认以屏幕左上角作为( 0,0 )坐标,按组件定义的先后顺序依次逐屏显示 , 后面出现的会覆盖前面的画面 。 用该布局可以实现动画效果 。

接下来,我们用三幅图片实现一只小鸟飞翔的动画效果。三张图片如下:


编写的mail.xml文件:

view plain
  1. <spanstyle="font-size:16px;"><?xmlversion="1.0"encoding="utf-8"?>
  2. <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:layout_gravity="center"
  6. android:id="@+id/frame"
  7. >
  8. </FrameLayout></span>

在该布局文件中定义一个 id 为 frame 的帧布局文件。
编写 FreamTestActivity.java 类

view plain
  1. <spanstyle="font-size:16px;">packagecn.class3g;
  2. importandroid.app.Activity;
  3. importandroid.graphics.drawable.Drawable;
  4. importandroid.os.Bundle;
  5. importandroid.os.Handler;
  6. importandroid.os.Message;
  7. importandroid.view.View;
  8. importandroid.view.View.OnClickListener;
  9. importandroid.widget.FrameLayout;
  10. publicclassFreamTestActivityextendsActivity{
  11. FrameLayoutframe=null;
  12. booleanflag=true;
  13. classMyHandlerextendsHandler{
  14. inti=0;
  15. publicvoidhandleMessage(Messagemsg){
  16. i++;
  17. show(i%3);
  18. sleep(50);
  19. }
  20. publicvoidsleep(longdelayMillis){
  21. if(flag){
  22. this.sendMessageDelayed(this.obtainMessage(0),delayMillis);
  23. }
  24. }
  25. }
  26. voidshow(inti){
  27. Drawablea=getResources().getDrawable(R.drawable.a1);
  28. Drawableb=getResources().getDrawable(R.drawable.a2);
  29. Drawablec=getResources().getDrawable(R.drawable.a3);
  30. switch(i){
  31. case0:
  32. frame.setForeground(a);
  33. break;
  34. case1

更多相关文章

  1. Android(安卓)入门第四讲04-小结-RecyclerView(回顾)+Context(介绍
  2. Android的Intent Filter详解
  3. 深入了解View(四)—— LayoutInflater原理及View测量/布局/绘制总
  4. android自定义checkBox的样式
  5. 【Android(安卓)界面效果10】Android中View,ViewGroup,Window之
  6. android 判断横竖屏问题的详解
  7. Android进阶笔记10:Android(安卓)万能适配器
  8. [置顶] Android列表收缩与展开仿QQ好友列表(非常详细,附源码)
  9. 自定义 Android(安卓)对话框 (AlertDialog) 的样式

随机推荐

  1. android 官方SDK文档
  2. Android(安卓)常见广告库包名合集
  3. Android(安卓)Property System
  4. Android中GridView区中且行间距设置
  5. Android(安卓)动态获取文本宽度
  6. ch024 Android(安卓)BroadCastReceiver
  7. Android(安卓)实例化
  8. android SQLite
  9. Toast
  10. Android(安卓)webview should overrideUr