《安卓入门(翻译).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.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.