android学习日记12--布局管理器

1、概述
  布局管理器的用途:
  a、可以更好的管理组件;
  b、通过使用布局管理器,Android应用程序可以做到平台无关性

  布局管理器都是ViewGroup的子类,所有可充当容器的父类都是ViewGroup,而ViewGroup也是View的子类

  

  下面分别介绍常用的布局管理器

 

2、线性布局管理器
  LinearLayout,最常用的布局之一。它提供控件水平或垂直排列的模型

常用属性及其对应方法:

gravity 可取属性说明:

当需要为gravity设多个值时,可用|分隔开

布局XML:

 1 <?xml version="1.0" encoding="utf-8"?> 
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 3 android:orientation="horizontal" 
 4 android:layout_width="fill_parent" 
 5 android:layout_height="fill_parent" 
 6 android:id="@+id/lla" 
 7 android:gravity="right" 
 8 >  
 9  
10 <Button  
11 android:text="添加"  
12 android:id="@+id/Button01"  
13 android:layout_width="wrap_content"  
14 android:layout_height="wrap_content">   
15 </Button> 
16  
17 </LinearLayout> 
View Code

JAVA代码:

 1 // 计数器,记录按钮个数
 2     int count = 0;
 3 
 4     @Override
 5     public void onCreate(Bundle savedInstanceState) { // 重写 onCreate 方法
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.horizontal_layout);
 8         // 获取屏幕中的按钮控件对象
 9         Button button = (Button) findViewById(R.id.Button01);
10 
11         // 为按钮添加 OnClickListener 接口实现
12         button.setOnClickListener(
13 
14 
15         new View.OnClickListener() {
16 
17             public void onClick(View v) {
18                 // 获取线性布局对象
19                 LinearLayout ll = (LinearLayout) findViewById(R.id.lla);
20 
21                 String msg = MainActivity.this.getResources().getString(
22                         R.string.button);
23                 // 创建一个 Button 对象
24                 Button tempbutton = new Button(MainActivity.this);
25 
26 
27 
28                 tempbutton.setText(msg + (++count)); // 设置 Button 控件显示的内容
29                 // 设置 Button 的宽度
30                 tempbutton.setWidth(80);
31                 // 向线性布局中添加 View
32                 ll.addView(tempbutton);
33 
34 
35 
36             }
37 
38         });
39 
40     }
View Code

运行效果:每点击添加按钮一次会在下方垂直生成一个按钮

 

将布局文件中

android:orientation="vertical"   

vertical改为horizontal

每点击一次会在右方水平方向生成一个按钮

当水平方向该行容不下一个宽度为80的按钮时,按钮就会被压缩,如下图

  此时再点击添加按钮时,画面没有任何变化,不会另起一行添加按钮,超出屏幕的将不会被显示。

 

3、表格布局

  TableLayout 类似HTML里的Table分为行和列来管理。
每一行为一个TableRow,也可以为View对象。当为View对象时就跨越该行所有列
TableRow中可以添加子控件,每个子控件为一列。并不会为每个单元格绘制边框
每个单元格为一个View,可以有空的单元格,也可以跨越多列
一个列的宽度由该列最宽的单元格决定的

TableLayout 可以设置三种属性
Shrinkable :它可以被压缩以适应其父容器的大小
Stretchable :它可以被拉伸以填满空闲区域
Collapsed :该列被隐藏

如果要对多列进行设置,用逗号隔开

这三个属性在JAVA代码也有对应的方法,值得一提的是它是继承Linearlayout的

布局XML:

  1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2     android:id="@+id/LinearLayout01"
  3     android:layout_width="fill_parent"
  4     android:layout_height="fill_parent"
  5     android:background="@drawable/water"
  6     android:gravity="bottom"
  7     android:orientation="vertical" >
  8 
  9     <TableLayout
 10         android:id="@+id/TableLayout01"
 11         android:layout_width="fill_parent"
 12         android:layout_height="wrap_content" >
 13 
 14         <TextView
 15             android:id="@+id/TextView01"
 16             android:layout_width="wrap_content"
 17             android:layout_height="wrap_content"
 18             android:layout_centerInParent="true"
 19             android:layout_margin="4px"
 20             android:background="@drawable/darkgray"
 21             android:text="@string/tv1" >
 22         </TextView>
 23     </TableLayout>
 24 
 25     <TableLayout
 26         android:id="@+id/TableLayout02"
 27         android:layout_width="fill_parent"
 28         android:layout_height="wrap_content"
 29         android:stretchColumns="0" >
 30 
 31         <TableRow
 32             android:id="@+id/TableRow01"
 33             android:layout_width="wrap_content"
 34             android:layout_height="wrap_content" >
 35 
 36             <TextView
 37                 android:id="@+id/TextView02"
 38                 android:layout_width="wrap_content"
 39                 android:layout_height="wrap_content"
 40                 android:layout_centerInParent="true"
 41                 android:layout_margin="4px"
 42                 android:background="@drawable/blue"
 43                 android:text="@string/tvStrech" >
 44             </TextView>
 45 
 46             <TextView
 47                 android:id="@+id/TextView03"
 48                 android:layout_width="wrap_content"
 49                 android:layout_height="wrap_content"
 50                 android:layout_centerInParent="true"
 51                 android:layout_margin="4px"
 52                 android:text="@string/tvShort" >
 53             </TextView>
 54         </TableRow>
 55     </TableLayout>
 56 
 57     <TableLayout
 58         android:id="@+id/TableLayout03"
 59         android:layout_width="fill_parent"
 60         android:layout_height="wrap_content"
 61         android:collapseColumns="1"
 62         android:shrinkColumns="0" >
 63 
 64         <TableRow
 65             android:id="@+id/TableRow02"
 66             android:layout_width="wrap_content"
 67             android:layout_height="wrap_content" >
 68 
 69             <TextView
 70                 android:id="@+id/TextView04"
 71                 android:layout_width="wrap_content"
 72                 android:layout_height="wrap_content"
 73                 android:layout_centerInParent="true"
 74                 android:layout_margin="4px"
 75                 android:background="@drawable/darkgray"
 76                 android:text="@string/tvShrink" >
 77             </TextView>
 78 
 79             <TextView
 80                 android:id="@+id/TextView05"
 81                 android:layout_width="wrap_content"
 82                 android:layout_height="wrap_content"
 83                 android:layout_centerInParent="true"
 84                 android:layout_margin="4px"
 85                 android:background="@drawable/lightred"
 86                 android:text="@string/tvShort" >
 87             </TextView>
 88 
 89             <TextView
 90                 android:id="@+id/TextView06"
 91                 android:layout_width="wrap_content"
 92                 android:layout_height="wrap_content"
 93                 android:layout_centerInParent="true"
 94                 android:layout_margin="4px"
 95                 android:background="@drawable/blue"
 96                 android:text="@string/tvLong" >
 97             </TextView>
 98         </TableRow>
 99     </TableLayout>
100 
101 </LinearLayout>
View Code

运行效果:

 

4、相对布局

  RelativeLayout子控件 的位置由兄弟控件或父容器来决定的
如果A控件由B控件来决定位置,则布局文件B控件要在A控件声明之前

常用属性
第一类:属性值为true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

第二类:属性值必须为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 本元素的右边缘和某元素的的右边缘对齐

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

布局XML:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <TextView
12         android:layout_width="wrap_content"
13         android:layout_height="wrap_content"
14         android:text="@string/hello_world" 
15         android:id="@+id/tv1"
16         android:layout_centerInParent="true"
17         />
18     
19     <TextView
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:text="big" 
23         android:textSize="30sp"
24         android:id="@+id/tv2"
25         android:layout_toRightOf="@id/tv1"
26         android:layout_alignBottom="@id/tv1"
27         />
28     
29     <TextView
30         android:layout_width="wrap_content"
31         android:layout_height="wrap_content"
32         android:text="middle" 
33         android:textSize="20sp"
34         android:id="@+id/tv3"
35         android:layout_above="@id/tv1"
36         android:layout_alignLeft="@id/tv1"
37         />
38 
39 </RelativeLayout>
View Code

运行效果:

 

5、帧布局

  FrameLayout在屏幕上开辟一块区域,在这块区域可以添加多个控件
但都会被对其到屏幕左上角,并且大小取决于最大的控件,如果控件一样大,只能看到最上面的控件

布局XML:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:layout_width="fill_parent"
 9         android:layout_height="fill_parent"
10         android:background="@drawable/lightgray"
11         android:gravity="center"
12         android:text="big" />
13 
14     <TextView
15         android:layout_width="150dp"
16         android:layout_height="150dp"
17         android:background="@drawable/darkgray"
18         android:gravity="center"
19         android:text="middle" />
20 
21     <TextView
22         android:layout_width="50dp"
23         android:layout_height="50dp"
24         android:background="@drawable/blue"
25         android:gravity="center"
26         android:text="small" />
27 
28 </FrameLayout>
View Code

运行效果:

 

6、绝对布局

  AbsoluteLayout是绝对位置布局。在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。
屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。
在此布局中的子元素可以相互重叠。在实际开发中,通常不采用此布局格式,因为它的界面代码过于刚性,以至于有可能不能很好的适配各种终端。
  由于不采用,在此就不演示代码了。

转载于:https://www.cnblogs.com/aiguozhe/p/3577371.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PXE装机+kickstart无人值守安装

搭建PXE远程安装服务器&#xff0c;本例集成了TFTP服务、DHCP服务&#xff0c;能够向客户机发送PXE引导程序&#xff0c;内核&#xff0c;启动菜单等。1.准备RHEL6安装源&#xff0c;网络安装源一般通过HTTP&#xff0c;FTP协议发布&#xff0c;另外页支撑NFS协议。采用FTP协议…

内核通识——内核中架构相关代码简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、内核代码基本分为3块 &#xff08;1&#xff09;arch目录 本目录下全是cpu架构有关的代码。本文说的就是这个目录中的内容。 &#xff08;2&#xff09;drivers目录 本目录下全是硬件的驱动。 &…

一道关于比赛胜负的Sql查询题目

以前做过一道题目&#xff0c;一直没有来得及总结下来。贴图&#xff1a; 记得以前曾经找到了两种方法&#xff0c;今天试了一下&#xff0c;还是可以的&#xff0c;贴出过程&#xff1a; 下面是具体的查询方法&#xff1a; 原来放的是图片,今天又练习了一下,附代码: 1 create …

SharePoint 2013 Nintex Workflow 工作流帮助(六)

博客地址 http://blog.csdn.net/foxdave 工作流动作 7. Call web service&#xff08;Integration分组&#xff09; 一个调用WebService的操作。 自然&#xff0c;配置项中主要是指向一个WebService进行调用。 关于配置项的说明&#xff1a; URL 必填项&#xff0c;也就是WebSe…

uboot的移植一一更换控制台串口

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、场景需求 X210开发板的SOC中一共有4个串口&#xff08;串口0~3&#xff09;&#xff0c;并且用DB9接口引出了2个串口&#xff0c;分别是串口0和串口2。其中靠近网口的是串口0&#xff0c;远离网口…

充实你的素材库!10款免费的 PSD 素材下载

由于网页设计师没有时间来自己从零开始设计&#xff0c;所以在设计项目中使用网络上已有的设计素材是常见的方式。这就是为什么我们经常会到网上搜索可以免费下载的素材。 今天&#xff0c;我们这里有几套不同的免费的 PSD 素材分享给你&#xff0c;从 iPhone 样机到用户界面等…

position:fixed和scroll实现div浮动【示例】

前言 在自己建站的过程中&#xff0c;要实现一个div随滚动条浮动的效果&#xff0c;网上找了些示例不太好用&#xff0c;还是自己动手&#xff0c;丰衣足食&#xff0c;写的不好请大家谅解&#xff0c;毕竟我不是搞前端的&#xff0c;因为自己建站毕竟每一步都必须自己来&#…

HashMap vs ConcurrentHashMap — 示例及Iterator探秘

2019独角兽企业重金招聘Python工程师标准>>> 如果你是一名Java开发人员&#xff0c;我能够确定你肯定知道ConcurrentModificationException&#xff0c;它是在使用迭代器遍历集合对象时修改集合对象造成的&#xff08;并发修改&#xff09;异常。实际上&#xff0c;…

谷歌浏览器跨域报错解决办法

谷歌浏览器跨域报错&#xff1a; 在浏览器属性设置一下就可以了。 最后&#xff0c;先打开浏览器&#xff0c;就可以了。 转载于:https://www.cnblogs.com/fanyun/p/4263363.html

Unable to find the ncurses libraries or the required header files解决

问题&#xff1a; 解决方法: sudo apt-get install ncurses-dev 参考&#xff1a;Unable to find the ncurses libraries or the required header files解决 转载于:https://www.cnblogs.com/amanlikethis/p/3591353.html

iOS自动布局进阶用法

本文主要介绍几个我遇到并总结的相对高级的用法&#xff08;当然啦牛人会觉得这也不算什么&#xff09;。 简单的storyboard中上下左右约束&#xff0c;固定宽高啥的用法在这里就不做赘述了。 autolayout自动布局是iOS6以后出现的&#xff0c;但是在开始的一段时间里大家并不怎…

Windows系统与Linux系统下的硬盘分区操作

以下内容源于网络资源的学习与整理&#xff0c;如有其侵权请告知删除。 之前在uboot中利用fdisk命令对X210开发板的iNand进行分区时&#xff0c; 因为不小心在uboot中利用“fdisk -c 1”&#xff08;1对应着sd卡&#xff0c;0对应着iNand&#xff09;对sd卡也分区了&#xff…

您应该了解的 Windows Azure 网站在线工具

&#xfeff;&#xfeff;编辑人员注释&#xff1a;本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写。 如果想要了解并亲身参与计算资源管理&#xff0c;那么您一定会很高兴得知这一消息&#xff1a;Windows Azure 网站现在提供一些非常有用的在线工具&#xff0c…

【自己给自己题目做】:如何在Canvas上实现魔方效果

最终demo -> 3d魔方 体验方法&#xff1a; 浮动鼠标找到合适的位置&#xff0c;按空格键暂停选择要翻转的3*3模块&#xff0c;找到相邻两个正方体&#xff0c;鼠标点击第一个正方体&#xff0c;并且一直保持鼠标按下的状态直到移到第二个正方体后放开&#xff0c;比如下图&…

彻底搞懂硬盘相关的概念

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 硬盘结构&#xff08;机械硬盘和固态硬盘&#xff09;详解 简单理解磁盘结构_Guanngxu的博客-CSDN博客_磁盘的结构 硬盘基础知识_Forskamse的博客-CSDN博客 硬盘知识笔记整理_落子摘星的博客-CSDN…

ubuntu下数据库的导入导出

2019独角兽企业重金招聘Python工程师标准>>> 一.导出远程数据库 例如 sudo mysqldump -h 172.16.1.211 -u haha -p123 -P3307 app>app.sql 二.导入.sql文件的 到数据库 1.create database xxx(创建一个名称是xxx的数据库) 2. use xxx(切换到该数据库下) 3. sou…

MBR分区表的简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;S5PV210 Uboot开发与移植01&#xff1a;Uboot概述_麦兜的学习笔记的博客-CSDN博客 &#xff08;2&#xff09;Linux系统下的硬盘分区、格式化与挂载_天糊土的博客-CSD…

Redis配置文件参数说明

配置文件参数说明: 1. Redis默认不是以守护进程的方式运行&#xff0c;可以通过该配置项修改&#xff0c;使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时&#xff0c;Redis默认会把pid写入/var/run/redis.pid文件&#xff0c;可以通过pidfile指定 pidfile …

movi命令(do_movi函数的源码分析)

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、do_movi函数分析 当执行movi相关命令时&#xff0c;实际执行的是do_movi函数。 x210 # help movi movi init - Initialize moviNAND and show card info movi read {u-boot | kernel} {addr} - Read …

[LeetCode]Search Insert Position

原题链接&#xff1a;http://oj.leetcode.com/problems/search-insert-position/ 题意描述&#xff1a; Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You …