android的布局剖析

上传人:今*** 文档编号:105860393 上传时间:2019-10-13 格式:DOC 页数:18 大小:1.19MB
返回 下载 相关 举报
android的布局剖析_第1页
第1页 / 共18页
android的布局剖析_第2页
第2页 / 共18页
android的布局剖析_第3页
第3页 / 共18页
android的布局剖析_第4页
第4页 / 共18页
android的布局剖析_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《android的布局剖析》由会员分享,可在线阅读,更多相关《android的布局剖析(18页珍藏版)》请在金锄头文库上搜索。

1、Android的布局 View的布局显示方式有下面几种:线性布局(Linear Layout)、相对布局(Relative Layout)、绝对布局(Absolute Layout)、表格布局(Table Layout)、网格视图(Grid View)、标签布局(Tab Layout)、列表视图(List View)。 在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。Android中有很多种View和ViewGroup,他们都继承自View类。View对象是Android平台上表示用户界面的基本单元。 View的布局显示方式直接影响用户界面,View的布局方式

2、是指一组View元素如何布局,准确的说是一个ViewGroup中包含的一些View怎么样布局。ViewGroup类是布局(layout)和视图容器(View container)的基类,此类也定义了ViewGroup.LayoutParams类,它作为布局参数的基类,此类告诉父视图其中的子视图想如何显示。其实,View布局方式的类都可以归结为如下图所示的ViewGroup的5个直接子类,其它的一些布局都扩展自这5个类。 一. Android的几种常用布局下面就分别介绍以上视图的七种布局显示方式效果及实现: 1. 线性布局 (Linear Layout) 线性布局,是一个ViewGroup以线性

3、方向显示它的子视图(view)元素,即垂直地或水平,就是每个元素占一行,或者是每个元素占一列。之前我们的Hello World程序中view的布局方式就是线性布局的,如下所示res/layour/main.xml: 从上面可以看出根LinearLayout视图组(ViewGroup)包含5个Button,它的子元素是以水平的线性方式(horizontal)布局,运行效果如下图所示: 如果你在android:orientation=horizontal设置为vertical,则是是垂直或者说是纵向的,如下图所示: 2. 相对布局(Relative Layout) 相对布局, 是一个ViewGro

4、up以相对位置显示它的子视图(view)元素,一个视图可以指定相对于它的兄弟视图的位置(例如在给定视图的左边或者下面) 或相对于RelativeLayout的特定区域的位置(例如底部对齐,或中间偏左)。 就像我说:我现在站在pawa和 tempest的中间;或者说,我站在队伍的中间。前者就是相对其他元素来定义位置,后者是相对整个布局来定义位置。(注:pawa和tempest是 Android历史上很著名的两位人物)。 相对布局是设计用户界面的有力工具,因为它消除了嵌套视图组。如果你发现你使用了多个嵌套的LinearLayout视图组后,你可以考虑使用一个RelativeLayout视图组了。

5、如下图所示,看下面的res/layour/main.xml: 从上面的布局文件我们知道,RelativeLayout视图组包含一个TextView、一个EditView、两个Button,(注意标记了,在运行代码的时候,请把这些注释去掉,否则会运行出错,上面加上是为了更加醒目!)的属性,在使用相对布局方式中就是使用这些类似的属性来定位视图到你想要的位置,它们的值是你参照的视图的id。运行之后,得如下结果: 3. 表格布局(Table Layout) 表格布局, 是一个ViewGroup以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。其实Android的表格布局跟HTML中的表

6、格布局非常类似,TableRow 就像HTML表格的标记。 但是,TableLayout 这个表格布局不像HTML中的表格那样灵活,只能通过 TableRow 属性来控制它的行,而列的话一般情况里面有几个控件就是几列。 用表格布局需要知道以下几点: android:shrinkColumns,对应的方法setShrinkAllColumns(boolean),作用:设置表格的列是否收缩 (列编号从0开始,下同),多列用逗号隔开 (下同),如android:shrinkColumns=0,1,2,即表格的第1、2、3列的内容是收缩的以适合屏幕,不会挤出屏幕。 android:collapseCo

7、lumns,对应的方法:setColumnCollapsed(int,boolean),作用:设置表格的列是否摺叠隐藏起来。 android:stretchColumns,对应的方法:setStretchAllColumns(boolean),作用:设置表格的列是否拉伸。运行之后可以得出下面的结果: 4. 列表视图(List View) 列表布局, 是一个ViewGroup以列表显示它的子视图(view)元素,列表是可滚动的列表。列表元素通过ListAdapter自动插入到列表。 ListAdapter:扩展自Adapter,它是ListView和数据列表之间的桥梁。ListView可以显示任

8、何包装在ListAdapter中的数据。该类提供两个公有类型的抽象方法: public abstract boolean areAllItemsEnabled () :表示ListAdapter中的所有元素是否有效(可用)? 如果返回真,即所有的元素是可选择的,即可点击的。 public abstract boolean isEnabled (int position) :判断指定位置的元素是否有效(可用)? 下面通过一个例子来,创建一个可滚动的列表,并从一个字符串数组读取列表元素。当一个元素被选择时,显示该元素在列表中的位置的消息。 1) 首先,将res/layour/main.xml的内容

9、置为如下: 这样就定义了元素在列表中的布局。 3) 运行应用程序得如下结果(点击1之后,在下面显示了1): 注意:1) 如果你改了HelloWorld extends ListActivity 而不是Activity之后,运行程序会出现如下的错误提示: “Conversion to Dalvik format failed with error 1”。解决办法是:菜单 Project - Clean. - Clean project selected below(要在下面的列表中勾选该工程),然后重新运行就ok了。2) 上面我们是把要填充到ListView中的元素硬编码到HelloWorld.

10、java文件中,这样既缺乏灵活性,也不符合“应用程序的界面与控制它行为的代码分离”的准则! 其实我们可以把要填充到ListView的元素写到res/values/strings.xml文件中的元素中,然后再源码中动态地读取。这样strings.xml的内容类似下面: 然后HelloWorld.java文件中的onCreate()函数,则这样动态访问这个数组及填充到ListVies: String countries = getResources().getStringArray(R.array.countries_array); setListAdapter(new ArrayAdapter(

11、this, R.layout.list_item, countries); 3) 首先总结一下列表布局的关键部分: 布局文件中定义ListView Adapter用来将数据填充到ListView 要填充到ListView的数据,这些数据可以字符串、图片、控件等等 其中,Adapter是ListView和数据源之间的桥梁,根据数据源的不同Adapter可以分为三类: (1) String: ArrayAdapter (2) ListMap: SimpleAdapter (3) 数据库Cursor: SimpleCursorAdapter 使用ArrayAdapter(数组适配器)顾名思义,需要把

12、数据放入一个数组以便显示,上面的例子就是这样的;SimpleAdapter能定义各种各样的布局出来,可以放上ImageView (图片),还可以放上Button (按钮),CheckBox (复选框)等等;SimpleCursorAdapter是和数据库有关的东西。5. 网格视图 (Grid View) 网格布局,是一个ViewGroup以网格显示它的子视图(view)元素,即二维的、滚动的网格。网格元素通过ListAdapter自动插入到网格。ListAdapter跟上面的列表布局是一样的,这里就不重复累述了。 下面通过一个例子来,创建一个显示图片缩略图的网格。当一个元素被选择时,显示该元素

13、在列表中的位置的消息。1) 首先,将上面实践截取的图片放入res/drawable/ 2) 在res/layour/main.xml中,设置一个填满整个屏幕的GridView,代码如下: onCreate()函数跟通常一样,首先调用超类的onCreate()函数函数,然后通过setContentView()为活动(Activity)加载布局文件。紧接着是,通过GridView的id获取布局文件中的gridview,然后调用它的setListAdapter(ListAdapter)函数填充它,它的参数是一个我们自定义的ImageAdapter。后面的工作跟列表布局中一样,为监听网格中的元素被点击

14、的事件而做的工作。 4)、实现我们自定义ImageAdapter,新添加一个类文件,它的代码如下: ImageAdapter类扩展自BaseAdapter,所以首先得实现它所要求必须实现的方法。构造函数和getcount()函数很好理解,而getItem(int)应该返回实际对象在适配器中的特定位置,但是这里我们不需要。类似地,getItemId(int)应该返回元素的行号,但是这里也不需要。 getView()方法,它为每个要添加到ImageAdapter的图片都创建了一个新的View。当调用这个方法时,一个View是循环再用的,因此要确认对象是否为空。如果是空的话,一个ImageView就被实例化且配置想要的显示属性: setLayoutParams(ViewGroup.LayoutParams):设置View的高度和宽度,这确保不管drawable中图片的大小,每个图片都被重新设置大小且剪裁以适应这些尺寸。 setScaleType(ImageView.ScaleType):声明图片应该向中心剪裁(如果需要的话)。 setPadding(int, int, int, int):定义补距,如果图片有不同的横纵比,小的补距将导致更多的剪裁以适合设置的Imag

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号