安卓入门(翻译).docx

上传人:夺命阿水 文档编号:1719462 上传时间:2024-12-16 格式:DOCX 页数:18 大小:32.96KB
返回 下载 相关 举报
安卓入门(翻译).docx_第1页
第1页 / 共18页
安卓入门(翻译).docx_第2页
第2页 / 共18页
安卓入门(翻译).docx_第3页
第3页 / 共18页
安卓入门(翻译).docx_第4页
第4页 / 共18页
安卓入门(翻译).docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《安卓入门(翻译).docx》由会员分享,可在线阅读,更多相关《安卓入门(翻译).docx(18页珍藏版)》请在课桌文档上搜索。

1、安卓入门(翻译)安卓入门马克墨菲著处理容器容器倒入一个部件的集合(和可能的容器)形成特定的结构。假如你想要一个在左边和右边的域标签的表格,你须要创建一个容器。假如你想确定和取消表单上的其他按钮或者旁边的一个,移动到屏幕的右边,你须要一个容器。只是从一个纯粹的XM1.视图,假如你有多个部件(除了单选按钮组件在RadioGroup),每一个容器必需有一个时应根元素将小部件放进去。大多数GU1.工具包都有一些概念的布局管理,常常组织到容器。在JaVa/Swing中,假如你的布局管理器如Box1.ayout和容器,运用它们(例如,盒)O一些工具包,如XU1.和E1.ex,坚持严格的盒模型,认为任何所需

2、的布局可以通过正确的组合实现套盒。Android中1.inear1.ayout,还供应/一个盒模型。此外,Android系统支持一系列的容器,供应不同的布局规则。在本章中,我们将看看一些常用的容器:1.inear1.ayout(盒模型),Re1.ative1.ayout(基于规则的模型),TabIe1.ayoUt(网格模型),和滚动视图,容器设计,帮助实现滚动容器。Thinking1.inear1.y线性思维1.inear1.ayout是一盒模型,其中部件或子容器排成一列或行,一个接一个。这些工程以类似的方式在Java/Swing中的F1.ow1.ayout,F1.ex和XU1.中的VBoX和

3、HBox工作。F1.ex和XU1.运用盒子作为他们的主要单元的他局。假如你情愿,你可以运用1.inear1.ayout以大致相同的方式,避开一些其他的容器。为了得到你想要的视觉表现,主要是识别箱巢的属性和哪些食子应当有,如与其他框对齐。1.inear1.ayout的概念和性质配置一,个1.inCar1.ayOUI,你限制五个主要方面:定位,填充模型,重量,重力,和垫。定位方向指示1.inear1.ayout表示一行或一列。只是在安卓中:在XM1.布局1.inear1.ayout元素到你的屈性,设置值为水平或垂直排列。定位可以在运行时修改调用在1.inear1.ayout中的Setorienta

4、tionO,其供应水F或垂直O填充模型让我们想象一排小部件,如一对单选按钮。这些部件有一个基于文本的自然的大小。他们联合的大小可能不与Android设备的屏幕宽度完全匹配,特殊是因为屏幕有各种尺寸。然后你怎么解决剩余空间。在一个1.inear1.ayout中全部部件必需供应Android:1.ayout_width和Android:1ayouI_hcight性质来帮助解决这个问题。这些屈性的值有三种类型:A你可以供应一个详细的尺寸,如125px指示部件应当是125像素。B你可以供应WraP_con1.en1.,这意味着部件应填补它的自然空间,除非是太大,在这种状况下,Android可以用换行来

5、适应。C可以供应fi1.1._parent,这意味着部件应填满全部可用的空间,在其封闭的容器,在全部其他部件的处理。后者是最常见的两种类型,他们是独立的大小的屏幕,让您查看ndroid的调整拟合的可用空间。权市但是假如你有两个小部件,应当把可用的空闱空间吗?例如,假设您有两个在一列多行字段,和你想让他们拿起剩下的空间列终归其他小部件已安排空间。做这项工作,除了设置android:IayOUt_width(行)或android:1.ayout_heightfi11._parcnt(列),你还必需设置android:1.ayout_weightoandroid:1.ayout。ight属性显示的比

6、例应当去的自由空间小部件。例如,假如您将android:1.ayout,weight相同的一对小部件(如非零值。1),它们之间的自由空间将平分秋色。假如你将它设置为一个部件1和2的其他部件,其次个小部件将运用自由空间,第一个小部件的两倍。一个小部件的重量是默认为零。另一个模式运用市量是假如你想安排大小百分比的基础上。运用这种技术,水平布局:A设置全部android:1.ayout_width值0小部件的布局。B设置android:1.ayout_weight值所需的百分比大小每个小部件的布局。C确保那些权重增加到100。重力默认状况下,全部在左,1.op-a1.igncd1.inear1.ay

7、out0所以,假如你创建一排小部件通过水平1.inear1.ayout,该行将起先刷新屏幕的左侧。假如这不是你想要的,您须要指定一个重力值。运用android:1.ayout_gravity部件(或称SetGraVity()在运行时在小部件的JaVa对象),您可以告知小部件和它的容器如何排列在屏幕上。列的小部件,常见的重力值,CenterJiorizonta1.,适合左对齐,居中,分别和右小部件。一排小部件,默认是他们一样所以文本对齐在基线(看不见的线,字母好像坐在)。您可以指定一个重力center_vertica1.中心沿行小部件的垂直的中点。填充钛认状况下,部件紧密相邻。假如你想增加部件之

8、间的空格,你将要运用Android:Padding属性(或叫SetPadding()在部件上的Java对象的运行时)0填充指定的空间有多大的边界之间的部件的细胞和实际的小部件。内容,如图6-1所示。图61部件,其细胞,和填充值之间的关系。在安卓中填充属性允许您设置相同的填充全部四个边的小部件,与部件的内容集中在填充区域。假如你想填充不同的在不同的方面,运用Android:padding1.eft,Android:paddingright,Android:paddingtop,Android:PaddingbOttOmo衬垫的价值维度,如5px5像素值填充。假如你运用自定义背景部件(例如,通过机

9、器人:背景屈性),背景将在后面的小部件和填充区域。为了避开这种状况,而不是用填充物,你可以建立利润,加空格不延长部件的内部尺寸。你可以设置页边距通过Android:IayouCmargintop及其相关属性。子元素的例子让我们看例(容器/线性)这两个属性集秀子元素在XM1.布局文件,在运行时。这里是布局:?xm1.version=1.0encoding=utf-8?1.inear1.ayoutXm1.ns:android=apkresandroidandroid:orientation二vertica1.android:1.ayout_width=fi1.1._parentandroid:1.

10、ayout_height=fi1.1._parentRadioGroupandroid:id=0+id/orientationandroid:orientation=horizonta1.android:1.ayout_width=wrap_contentandroid:1.ayout_height=wrap_contentandroid:padding=5pxRadioButtonandroid:id=+id/horizonta1.android:text=horizonta1./RadioButtonandroid:id=+id/vertica1.android:text=vertica1

11、./RadioGroupRadioGroupandroid:id=+id/gravityandroid:orientation=vertica1.android:1.ayout_width=fi1.1._parentandroid:1.ayout_height=wrap_contentandroid:padding=5pxRadioButtonandroid:id=+id/1.eftandroid:text=1.eft/RadioButtonandroid:id=+id/centerandroid:text=center/RadioBut1.onandroid:id=+id/rightandr

12、oid:text=right/留意,我们有一个RadioGroup/1.inear1.ayout1.inear1.ayout包装两个RadioGroup集。RadioGroup1.inear1.ayout的子类,所以我们的示例演示了嵌套盒,好像他们都是1.inear1.ayoUt容器。RadioGroup顶部设置一行(面对android:=横向)的RadioButton小部件。各方RadioGroup5px的填充,将其与其他RadioGroupo宽度和高度都是设置为wrap_content,所以单选按钮只会占用他们所须要的空间。RadioGroup底部是一列(面对android:=垂宜)三个R

13、adioBuHon小部件。再一次,我们有5px各方填充和自然高度(android:1.ayout_height=wrap_content)0然而,我们已将android:1.ayout_widthfi1.1._parent,意义的列单选按钮声称整个屏幕的宽度。调整这些设置在运行时依据用户输入,我们须要一些Java代码:Pmonsware.android.1.inear;importandroid.app.Activity:importandroid.os.Bund1.e;importandroid.view.Gravity;importandroid.text.TextWatcher;impo

14、rtandroid.widget.1.inear1.ayout:importandroid.widget.RadiOGrOUP;importandroid.widget.EditText;pub1.icc1.ass1.inear1.ayoutDemoextendsActivityimp1.ementsRadioGroup.OnCheckedChangc1.istenerRadioGrouporientation;Rac1.ioGroupgravity:Overridepub1.icvoidOnCreate(Bund1.eicic1.e)super.onCreate(icic1.e);SetCo

15、ntentView(R.1.ayout.main);orientation=(RadioGroup)FindViewById(R.id.orientation);orientation.SetOnCheckedChange1.istener(this);gravity=(RadioGroup)FindViewById(R.id.gravity);gravity.SetOnCheckedChange1.istener(this):pub1.icvoidOnCheckedChanged(RadioGroupgroup,intchecked1.d)switch(checked1.d)caseR.id

16、.horizonta1.:orientation.SetOrientation(1.inear1.ayout.HORIZONTA1.);break:caseR.id.vertica1:orientation.SetOrientation(1.inear1.ayout.VERTICA1.);break;caseR.id.1.eft:gravity.SetGravity(Gravity.1.EFT);break;caseR.id.center:gravity.SetGravity(Gravity.CENTER_HORIZONTA1.);break;caseR.id.right:gravity.Se

17、tGravity(Gravity.RIGHT);break;在的OnCreate()中,我们期盼了我们两个RadioGroup中容器和注册每个侦听器,所以我们当单选按钮变更状态(SetOnCheCkCdChangC1.iSIenCr(本)的通知。|)|于活动实现OnCheckedChange1.istener,活动本身是监听器。在OnCheckedChanged()(回调的监听器),我们可以看到它RadioGr。UP中有一个状态变更。假如它是在取向基,我们调整基于所述用户的选择方向。假如它是重力基,我们调整基于所述用户的选择的严峻性。如图6-2所示,当布局演示第一次在仿真器内部发起的结果。图6

18、-20该1.inCar1.ayOUtDCmO示例应用程序,因为最初推出假如我们切换在垂宜单选按钮,顶RadioGroup中调整匹配,如图所示图6-3.Figure6-2显示了布局演示第一次在仿真器内部发起的结果。图6-3相同的应用程序,与垂宜单选按钮选择。假如我们切换中心或右边的单选按钮,底部RadioGroup中调整相匹配,如图6-4和6-5所示。图6-40相同的应用程序,与垂宜和中心单选按钮选择。图6-50相同的应用程序,与垂宜和右单选按钮选择。全部的事物都是相对的Re1.ative1.ayout,顾名思义,基于他们的关系,勾画出部件其他部件中的容器和父容器。可以放置插件X下方和插件的左侧

19、,有插件Z的底部边缘对齐与容器的底部。这不禁让人想起詹姆斯艾略特的Jaava/Swing中ReIatiVe1.ayoUt的运用。Re1.ative1.ayout的概念和性质为了使您的Re1.ative1.ayout工作,你须要的方式来在一个XM1.布局文件中引用的其他部件,再加方式来表示这些部件的相对位置。相对于容器的位置最简洁的关系成立是那些扎一个小部件的位置,它的容器:Aandroid:IayOUt_a1.ignParentTop:对准部件的顶部与容器的顶部。Bandroid:IayoUt_a1.ignParentBottom:对准部件的底部与容器的底部。Candroid:IayOUt_a

20、1.ignParent1.eft:对齐部件的左侧与容器的左侧。Dandroid:1.ayout_a1.ignParentRight:对准部件的右侧与右侧的容器。Eandroid:IayOUt_CenterHOriZOntaI:水平地定位的部件,在容器的中心位置。Fandroid:IayOUt_centerVertica1.:位置的小部件垂直于容器的中心。Gandroid:IayOUt_centeNnParent:位置的小窗口在水平方向和垂直方向在容器的中心位置。全部这些属性以一个简洁的布尔值(true或fa1.se)。注:小窗口的填充正在执行的各种a1.ignments.The比对基于小窗口的

21、整体细胞(其自然空间加上填充组合)上时考虑。属性相对的符号相关的各ReIatiVe1.ayoUt的其余属性取作为一个值在容器中的小窗口的身份。要做到这些点:Aandroid:1.ayout_above:表示该窗口小部件应放置在属性引用的部件的上方。Bandroid:IayOU1.bCIoW:表示该窗口小部件应放置在属性引用的部件如下。Candroid:1.ayOUt_Io1.eftOf:表示该窗口小部件应放置在属性引用的部件的左侧。Dandroid:IayouttoRightOf:表示该窗口小部件应放置在属性引用的部件的右侧。除了这四个,另外五个附加属性可以限制一个小部件的排列:Eandroi

22、d:IayOUJa1.ignTOP:表示该部件的顶部应与物业引用的Widget的顶部对齐。Fandroid:IayoUt_a1.ignBottOnI:表示该部件的底部应当用在属性引用的控件的底部对齐。Gandroid:IayoUt_a1.ign1.eft:表示该部件的左侧应当用在属性引用的控件的左对齐。Handroid:IayoUt_a1.ignRight:表示该部件的权利应得到与在属性引用的控件的右对齐。Iandroid:IayOUt_a1.ignBase1.ine:表明这两个部件的基线应当对齐(其中基线Ihattcx1.好像坐在无形的线)0Android:1.ayouta1.ignBasc

23、1.ine属性是对齐的标签和字段,以便文本显示自然有益。由于场四周有一个框,标签不这样做,安卓IayOUt_a1.ignTop会对准现场的盒子的顶部与标签的顶部,这将导致标签的文本,以更高的屏幕上比文本进入场。所以,假如你想小部件B被定位为小部件的权利,为小部件B的XM1.元素,你须要包括android:1.ayout-toRightOf=ID/widget_a(假设ID/widget_a是小部件的身份)。评价它曾经是Android的会运用单次处理Re1.ative1.ayout的定义的规则。这意味着你不能引用一个小部件(例如,通过机器人:IayOUt_above),宜到它在XM1.被宣布。这

24、使得定义一些布局有点困难。在起先的Android1.6,Android运用两遍处理的规则,所以你现在可以平安地有向前引用到的尚未未定义的部件。白板假如你喜爱UTM1.表格,表格网格,等等,你会明白Android的TabIe1.ayOUt,它可以让你在网格中您的规格定位的部件。可以限制行和列,其中列可能收缩或伸展,以适应其内容等的数量。Tab1.e1.ayout工程通过tab1.erow结合。Tab1.e1.ayout限制容器的整体行为,与小部件本身倾入一个或一个以上的Tab1.eRow容器,每行中的网格之一。Tab1.e1.ayout概念和属性为了您的表格侦局,你须要弄清晰小部件的行和列是如何

25、工作的,以及如何处理驻留外排部件。行中的单元格行是通过你设定的,开发商宣布,通过把部件作为整体Tab1.e1.ayout里面的TabICROW的儿童。因此,您干脆限制多少行出现在表中。由系统确定的列数;可以限制在一个间接的方式列数。首先,将有每插件的至少一个塔中的最长行。因此,假如你有三行酮与两个小部件,一个具有三个小部件和一个具有四个部件-会有至少四个列。但是,一个小部件可以占用不止一列由包括Android:1.ayout_span物业,说明栏小工具跨越的数量。这类似于在合并单元格属性,人们发觉在表格单元格中的HTM1.o在这个XMI.布局片段,现场横跨三列:Tab1.eRowTextVie

26、wandroid:text=UR1.:/EditTextandroid:id=+identryandroid:1.ayout-spa11=3/Tab1.eRow通常状况下,小部件放入第一个可用的列。在前面的片段,标签会去在第一列(列0,如列从0起先计数的起先),和场将进入跨区一套三列(列1至3)但是,你可以把一个小部件到通过Android不同的列:1.ayout_co1.umn财产,指定从零起先的列的小部件属于:Tab1.eRowButtonandroid:id=+idcance1.android:1.ayout_co1.umn=2android:text=Cance1./Buttonandr

27、oid:id=+idokandroid:tcxt=OK/Tab1.eRow在前面的XM1.布局片段,取消按钮变为在第三列(列2)。然后确定按钮进入下一个可用的列,该列是第四列。Tab1.e1.ayout其他衍生通常状况下,TabIe1.ayOUt只包含的Tab1.eRow元素干脆孩子。然而,也可以把其他部件中的行之问。对于这些部件,Tab1.e1.ayout行为有点像的1.inear1.ayoUt与垂立方向。小部件自动具有它们的宽度设置为FI1.kPARENT,所以他们将填补同一空间的最长行一样。一图案,这是运用一个一般的视图作为一个分频器。例如,你可以运用查看机器人:IayoU1.J1.ei

28、ght=2px的机器人:背景=#OOOOFI/为整个表格的宽度为2像素高的蓝条。伸展,收缩,并关闭默认状况下,每列将依据最宽的小窗口中的列(考虑跨越列考虑在内)的正常大小的尺寸。然而,有时候,不工作特别好,你须要更多的限制栏的行为。你可以把一个机器人:在Tab1.e1.ayoutStretchCo1.umns财产。该值应达一个单一的列号(同样,从0起先),或以逗号分隔的列号的列表。那些列将被拉伸以占用行上的任何可用空间。这有助于假如内容比可用空间变窄。相反,你可以把一个机器人:在Tab1.e1.ayoutshrinkCoIumns财产。同样,这应当走一个单一的列数,或用逗号分隔的列号的列表。在

29、该属性将试图列出的列字包袱它们的内容,以削减柱的有效宽度。默认状况下,窗口小部件不自动换行。这有助于假如你有潜在罗嗦内容列可能会导致某些列要推离的右侧的画面。您还可以利用一个机器人:co1.IapseCo1.umns财产上的Tab1.c1.ayout,再次列号或列号逗号分隔的列表。这些列将起先崩溃,这意味着它们将是表信息的一部分,但将是不行见的。以编程方式,您可通过调用Tab1.eIxayoutsetCoIumnCo1.1.apsedO可能须要运用此,以允许用户限制哪些列重视它们的和应显示对哪些是不那么重要,并且可以被隐藏。您还可以限制伸缩,并通过setCo1.umnStretchab1e()

30、和setCo1.umnShrinkab1.e()在运行时萎缩OTab1.e1.ayout示例前面介绍的XM1.布局片段,组合起来,供应我们的Re1.ativc1.ayout的创建形式的Tab1.e1.ayout再现,加上标签/场和两个按钮(在容器/表演示中)之间的分隔线的:?xm1.version=1.0encoding=utf8?Tab1.e1.ayoutxm1.ns:android=apkresandroidandroid:1.ayout_width=fi1.1._parentandroid:1.ayout_height=fi1.1._parentandroid:StretchCo1.um

31、ns=1Tab1.eRowTextViewandroid:text=UR1.:/EditTextandroid:id=+id/entryandroid:1.ayout_span=3/Tab1.eRowViewandroid:IayoUtJieight=2pxandroid:background=#000OFF/Tab1.eRowButtonandroid:Id=+id/cance1.android:1.ayout_co1.umn=2android:text=Cance1./Buttonandroid:id=+id/okandroid:text=OK/Tab1.eRow/Tab1.e1.ayou

32、t当反编译生成的Java代码并运行在模拟器上,我们得到了结果如图6-6所示。图6-6o电话屏幕往往该Tab1.e1.ayoutDemo示例应用程序涡卷很小,这就要求开发人员运用的一些技巧,在有限的可用空间呈现了大量的信息。一个绝技这样做的方法是运用滚动,的信息,因此只有一部分是可见的,在同一时间,其余的经由向上或向下滚动可用。滚动型是一个容器,供应滚动的内容。你可以实行一个布局,可能是太大了一些画面,把它包在一个滚动,仍旧运用现有的布局逻辑。它只是恰巧,用户可以在同一时间看到你的布局的一部分。例如,下面是一个XM1.布局文件中运用(从集装箱/滚动演示)一个滚动:?xm1.version=1.0

33、encoding=utf8?Scro1.1.Viewxm1.ns:android=apkresandroidandroid:1.ayout_width=fi1.1._parentandroid:1.ayout_height=wrap_contentTab1.e1.ayoutandroid:1.ayout_width=fi11._parentandroid:Iayoujheigh1.=fi1.1._parentandroid:StretchCo1.umns=0Tab1.eRowViewandroid:IayOUt_heighI=80pxandroid:background=#000000/Tex

34、tViewandroid:text=8000000android:padding1.eft=4pxandroid:IayoU1.graVity=CenteJVertiCa1./Tab1.eRowTab1.eRowViewandroid:1.ayout_height=80pxandroid:background=#440000/TextViewandroid:text4pxandroid:#440000android:padding1.eft1.ayout_gravity=center_vertica1./Tab1.eRowTab1.eRowViewandroid:1.ayout_height=

35、80pxandroid:background=#884400/TcxtViewandroid:text=#884400android:Padding1.eft=4pxandroid:1.ayout_gravity=center_vertica1./Tab1.eRowTab1.eRowVicwandroid:1.ayout_height=80pxandroid:background=*aa8844/TextViewandroid:text=ttaa8844android:Padding1.eft=4pxandroid:1.ayout_gravity=center_vertica1./Tab1.e

36、RowTab1.eRowViewandroid:1.ayout_hcight=80pxandroid:background=tiffaa88/TextViewandroid:text#ffaa88android:paddi11g1.eft=4pxandroid:IayOUt_gravity=center_vertica1./Tab1.eRowTab1.eRowVicwandroid:1.ayout_height=80pxandroid:background=Sffffaa/TextViewandroid:text=Uffffaaandroid:Padding1.eft=4pxandroid:1

37、.ayout_gravitycenter_vertica1./Tab1.eRowTab1.eRowViewandroid:IayOUt_heighI=80pxandroid:background=Uffffff/TextViewandroid:text=Jtffffffandroid:padding1.eft=4pxandroid:IayoU1.graVity=CenteJVertiCa1./Tab1.eRow/Tab1.e1.ayout/Scro1.1.View若无滚动,该表将占用至少560个像素(在807行每个像素的基础上,查看声明)o有可能与屏幕一些设备能显示这么多的信息,但很多将较小。

38、在滚动让我们保持表原样,但在同一时间出现的只是其中的一部分。对该股Android模拟器,当活动第一次看,你看结果如图6-7所示。图6-7。该Scro1.1.VicwDenio示例短用程序留意只有五行和第六部分是如何可见。通过按D-垫的上/下按钮,你可以上下滚动查看剩余行。还要留意的是如何在右侧的内容被滚动裁剪。肯定要放一些填充上侧或以其他方式确保您的内容不会被以这种方式裁剪。Android1.5推出了Horizonta1.Scro1.IView,它的工作原理是滚动的,但是基于水平方向。这对于可能是太宽,而不是太高的形式特别有用。须要留意的是,无论滚动,Horizonta1.Scro1.IView也不会给你双向滚动;你须要选择垂直或水平。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号