Android七种布局解析.pdf
《Android七种布局解析.pdf》由会员分享,可在线阅读,更多相关《Android七种布局解析.pdf(18页珍藏版)》请在咨信网上搜索。
1、我们对 Android 应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用“Hello World!”程序来实践证明了。在继续深入 Android 开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View 的几种布局显示方法,以后就不会在针对布局方面做过多的介绍。View 的布局显示方式有下面几种:线性布局线性布局(Linear Layout)、相对布局相对布局(Relative Layout)、表格布局表格布局(Table Layout)、网格视图网格视图(Grid View)、标签布局标签布局(Tab Layout)、列表视图列表视图(List View)、绝对布局绝对布局
2、(AbsoluteLayout)。本文虽然是介绍 View 的布局方式,但不仅仅是这样,其中涉及了很多小的知识点,绝对能给你带来 Android 大餐!本文的主要内容就是分别介绍以上视图的七种布局显示方式效果及实现,大纲如下:1、View 布局概述2、线性布局(Linear Layout)o2.1、Tips:android:layout_weight=13、相对布局(Relative Layout)4、表格布局(Table Layout)5、列表视图(List View)o5.1、一个小的改进o5.2、补充说明6、网格视图(Grid View)7、绝对布局()8、标签布局(Tab Layout
3、)1、view 的布局显示概述的布局显示概述通过前面的学习我们知道:在一个 Android 应用程序中,用户界面通过 View 和 ViewGroup 对象构建。Android 中有很多种 View 和 ViewGroup,他们都继承自 View 类。View 对象是 Android 平台上表示用户界面的基本单元。View 的布局显示方式直接影响用户界面,View 的布局方式是指一组 View 元素如何布局,准确的说是一个 ViewGroup 中包含的一些 View 怎么样布局。ViewGroup 类是布局(layout)和视图容器(View container)的基类,此类也定义了ViewG
4、roup.LayoutParams 类,它作为布局参数的基类,此类告诉父视图其中的子视图想如何显示。例如,XML 布局文件中名为 layoulayout_t_somethingsomething的属性(参加上篇的 4.2 节)。我们要介绍的 View 的布局方式的类,都是直接或间接继承自 ViewGroup 类,如下图所示:图 1、继承自 ViewGroup 的一些布局类其实,所有的布局方式都可以归类为 ViewGroup 的 5 个类别,即 ViewGroup 的 5 个直接子类。其它的一些布局都扩展自这 5 个类。下面分小节分别介绍 View 的七种布局显示方式。2、线性布局(、线性布局(
5、Linear Layout)线性布局线性布局:是一个 ViewGroup 以线性方向显示它的子视图(view)元素,即垂直地垂直地或水平地水平地。之前我们的 Hello World!程序中 view 的布局方式就是线性布局的,一定不陌生!如下所示 res/layour/main.xml:从上面可以看出根 LinearLayout 视图组(ViewGroup)包含 5 个 Button,它的子元素是以线性方式(horizontal,水平的)布局,运行效果如下图所示:图 2、线性布局(水平或者说是横向)如果你在 android:orientation=horizontal设置为 vertical,
6、则是是垂直或者说是纵向的,如下图所示:图 3、线性布局(垂直或者说是纵向)2.1、Tips:android:layout_weight=1 这个属性很关键,如果你没有显示设置它,它默认为 0。把上面布局文件(水平显示的那个)中的这个属性都去掉,运行会得出如下结果:图 4、layout_weight 属性没有了这个属性,我们本来定义的没有了这个属性,我们本来定义的 5 个个 Button 运行后却只显示了运行后却只显示了 2 个个 Button,为什么呢?,为什么呢?weight顾名思义是权重权重的意思,layout_weight 用于给一个线性布局中的诸多视图的重要程度赋值。所有的视图都有一个
7、 layout_weight 值,默认为零,意思是需要显示多大的视图就占据多大的屏幕空间。这就不难解释为什么会造成上面的情况了:Button1Button5 都设置了 layout_height 和 layout_width 属性为 wrap_content 即包住文字内容,他们都没有设置 layout_weight 属性,即默认为 0.,这样 Button1 和 Button2 根据需要的内容占据了整个屏幕,别的就显示不了啦!若赋一个高于零的值,则将父视图中的可用空间分割,分割大小具体取决于每一个视图的 layout_weight 值以及该值在当前屏幕布局的整体 layout_weight
8、值和在其它视图屏幕布局的 layout_weight 值中所占的比率而定。举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素。该文本标签并无指定 layout_weight 值,所以它将占据需要提供的最少空间。如果两个文本编辑元素每一个的 layout_weight 值都设置为 1,则两者平分在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的 layout_weight 值设置为 1,而第二个的设置为3、相对布局(、相对布局(Relative Layout)相对布局相对布局:是一个 ViewGroup 以相对位置显示它的子视图(view)
9、元素,一个视图可以指定相对于它的兄弟视图的位置(例如在给定视图的左边或者下面)或相对于RelativeLayout 的特定区域的位置(例如底部对齐,或中间偏左)。相对布局是设计用户界面的有力工具,因为它消除了嵌套视图组。如果你发现你使用了多个嵌套的 LinearLayout 视图组后,你可以考虑使用一个 RelativeLayout 视图组了。看下面的 res/layour/main.xml:Button android:id=+id/ok android:layout_width=wrap_content android:layout_height=wrap_content android:
10、layout_below=id/entry android:layout_alignParentRight=true android:layout_marginLeft=10dip android:text=OK/Button android:layout_width=wrap_content android:layout_height=wrap_content android:layout_toLeftOf=id/ok android:layout_alignTop=id/ok android:text=Cancel/从上面的布局文件我们知道,RelativeLayout 视图组包含一个 T
11、extView、一个 EditView、两个 Button,注意标记了的属性,在使用相对布局相对布局方式中就是使用这些类似的属性来定位视图到你想要的位置,它们的值是你参照的视图的 id。这些属性的意思很简单,就是英文单词的直译,就不多做介绍了。运行之后,得如下结果:图 5、相对布局4、表格布局(表格布局(Table Layout)表格布局表格布局:是一个 ViewGroup 以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。其实 Android 的表格布局跟 HTML 中的表格布局非常类似,TableRow 就像 HTML 表格的标记。用表格布局需要知道以下几点用表格布局需要知
12、道以下几点:android:shrinkColumns,对应的方法:setShrinkAllColumns(boolean),作用:设置表格的列是否收缩(列编号从 0 开始,下同),多列用逗号隔开(下同),如 android:shrinkColumns=0,1,2,即表格的第 1、2、3 列的内容是收缩的以适合屏幕,不会挤出屏幕。android:collapseColumns,对应的方法:setColumnCollapsed(int,boolean),作用:设置表格的列是否隐藏android:stretchColumns,对应的方法:setStretchAllColumns(boolean),
13、作用:设置表格的列是否拉伸看下面的 res/layour/main.xml:运行之后可以得出下面的结果:图 6、表格布局5、列表视图(、列表视图(List View)列表布局列表布局:是一个 ViewGroup 以列表显示它的子视图(view)元素,列表是可滚动的列表。列表元素通过ListAdapter 自动插入到列表。ListAdapterListAdapter:扩展自Adapter,它是ListView和数据列表之间的桥梁。ListView 可以显示任何包装在 ListAdapter 中的数据。该类提供两个公有类型的抽象方法:1.public abstract boolean areAll
14、ItemsEnabled():表示 ListAdapter 中的所有元素是否可激活的?如果返回真,即所有的元素是可选择的即可点击的。2.public abstract boolean isEnabled(int position):判断指定位置的元素是否可激活的?下面通过一个例子来,创建一个可滚动的列表,并从一个字符串数组读取列表元素。当一个元素被选择时,显示该元素在列表中的位置的消息。1)、首先,将 res/layour/main.xml 的内容置为如下:这样就定义了元素在列表中的布局。2)、src/blogs.www/HelloWorld.Java 文件的代码如下:package blog
15、s.www;import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener
16、;public class HelloWorld extends ListActivityListActivity /注意这里 Helloworld 类不是扩展自 Acitvity,而是扩展自ListAcitivty /*Called when the activity is first created.*/Override public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setListAdapter(setListAdapter(newnew ArrayAdapter(Arra
17、yAdapter(thisthis,R.layout.main,R.layout.main,COUNTRIES);COUNTRIES);ListView lv=getListView();lv.setTextFilterEnabled(true);lv.setOnItemClickListener(new OnItemClickListener()public void onItemClick(AdapterView parent,View view,int position,long id)/When clicked,show a toast with the TextView text T
18、oast.makeText(getApplicationContext(),(TextView)view).getText(),Toast.LENGTH_SHORT).show(););static final String COUNTRIES=new String 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 ;Note:onCreate()函数中并不像往常一样通过 setContentView()为活动(Activity)加载布局文件,替代的是通过setListAdapter(ListAdapter)自动添加一
19、个 ListView 填充整个屏幕的 ListActivity。在此文件中这个方法以一个 ArrayAdapter 为参数:setListAdaptsetListAdapter(er(newnew ArrayAdapter(ArrayAdapter(thisthis,R.layout.main,R.layout.main,COUNTRIES)COUNTRIES),这个 ArrayAdapter 管理填入 ListView 中的列表元素。ArrayAdapter 的构造函数的参数为:this(表示应用程序的上下文 context)、表示 ListViewde 布局文件(这里是 R.layout.
20、main)、插入 ListView 的 List 对象对数组(这里是 COUNTRES)。setOnItemClickListener(OnItemClickListener)定义了每个元素的点击(on-click)的监听器,当 ListView 中的元素被点击时,onItemClick()方法被调用,在这里是即一个 Toast 消息每个元素的位置将显示。3)、运行应用程序得如下结果(点击 1 之后,在下面显示了 1):图 7、列表布局NOTE:如果你改了 HelloWorld extends ListActivity 而不是 Activity 之后,运行程序是提示:“Conversion t
21、o Dalvik format failed with error 1”。可以这么解决:解决办法是 Project Clean.Clean project selected below Ok5.1、一个小的改进、一个小的改进上面我们是把要填充到 ListView 中的元素硬编码到 HelloWorld.java 文件中,这样就缺乏灵活性!也不符合推荐的应用程序的界面应用程序的界面与控制它行为的代码控制它行为的代码更好地分离的准则!其实我们可以把要填充到 ListView 的元素写到res/values/strings.xml文件中的元素中,然后再源码中动态地读取。这样 strings.xml
22、的内容类似下面:1 2 3 4 5 6 7 然而 HelloWorld.java 文件中的 onCreate()函数,则这样动态访问这个数组及填充到 ListVies:String countries=getResources().getStringArray(R.array.countries_array);setListAdapter(new ArrayAdapter(this,R.layout.list_item,countries);5.2、补充说明、补充说明首先总结一下列表布局的关键部分:布局文件中定义 ListViewAdapter 用来将数据填充到 ListView要填充到 Li
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 布局 解析
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。