5 视图界面布局

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

GoogleAndroid视图界面布局onandroid本章内容界面布局设计线性布局表格布局帧布局相对布局控制视图界面的其他方法代码控制视图界面代码和XML联合控制视图界面多界面的使用封装数据数据获取界面布局设计ViewGroup类,是View类的子类,可以充当其他组件的容器。同时布局管理器又作为ViewGroup的子类,在Android中提供了五种,布局可以相互嵌套。线性布局管理器表格布局管理器帧布局管理器相对布局管理器绝对布局管理器ViewTableLayoutViewGroupAbsoluteLayoutRelativeLayoutLinearLayoutFrameLayout界面布局设计-线性布局LinearLayout设置组件在垂直或者水平方向排列线性布局常用属性XML属性说明android:orientation设置线性布局的方向:horizontal(水平)vertical(垂直)android:gravity设置内部组件的布局对齐方式,多个值时,用“|”来分隔,取值:top、bottom、left、right、fill、center_vertical、center_horizontal、center、fill_vertical、fill_horizontal界面布局设计-线性布局界面布局设计-表格布局TableLayout、TableRow直接向TableLayout中添加组件,该组件也将直接占用一行列的宽度由该列中最宽的那个组件决定通过设置列的属性可以对列进行隐藏、伸展、收缩操作Collapsed,如果一列被标识为collapsed,则该列将会被隐藏Shrinkable,如果一列被标识为shrinkable,则该列的宽度可以进行收缩,以使表格能够适应其父容器的大小Stretchable,如果一列被标识为stretchable,则该列的宽度可以进行拉伸,以使填满表格中空闲的空间界面布局设计-表格布局TableLayout继承自LinearLayout类,继承来自父类的属性和方法特定属性XML属性说明android:collapseColumns设置列为Collapsed,列号从0开始,多个列号用“,“分隔android:shrinkColumns设置列为Shrinkable,列号从0开始,多个列号用“,“分隔android:stretchColumns设置为Stretchable,列号从0开始,多个列号用“,“分隔界面布局设计-表格布局界面布局设计-帧布局FrameLayout,也称为框架布局每个组件对应的一帧都会被对齐到屏幕的左上角,即(0,0)坐标点开始布局帧布局中没有android:gravity属性;帧布局中的组件如果没有设置对齐方式,组件会重叠在一起。因此,这些组件需要在属性android:layout_gravity中设置自己在帧布局中的位置。XML属性说明android:foreground设置该帧布局容器的前景图像android:foregroundGravity设置前景图像的gravity属性,即显示位置界面布局设计-帧布局界面布局设计-相关布局RelativeLayout按照组件之间的相对位置来进行布局,是实际布局中最常用的方式之一属性较多,所以属性之间产生冲突的可能性也较大XML属性说明android:gravity设置该布局容器内部各子组件的对齐方式android:ignoreGravity设置不受gravity组件影响的组件界面布局设计-相关布局XML属性说明android:layout_centerHorizontal当前组件位于父组件的横向中间位置android:layout_centerVertical当前组件位于父组件的纵向中间位置android:layout_centerInParent当前组件位于父组件的中央位置android:layout_alignParentBottom当前组件底端与父组件底端对齐android:layout_alignParentLeft当前组件左侧与父组件左侧对齐android:layout_alignParentRight当前组件右侧与父组件右侧对齐android:layout_alignParentTop当前组件顶端与父组件顶端对齐android:layout_alignWithParentIfMissing参照组件不存在或不可见时参照父组件描述当前组件与父组件(布局管理器)的相对位置界面布局设计-相关布局XML属性说明android:layout_toRightOf使当前组件位于给出id组件的右侧android:layout_toLeftOf使当前组件位于给出id组件的左侧android:layout_above使当前组件位于给出id组件的上方android:layout_below使当前组件位于给出id组件的下方android:layout_alignTop使当前组件的上边界与给出id组件的上边界对齐android:layout_alignBottom使当前组件的下边界与给出id组件的下边界对齐android:layout_alignLeft使当前组件的左边界与给出id组件的左边界对齐android:layout_alignRight使当前组件的右边界与给出id组件的右边界对齐通过兄弟组件之间的相对位置来进行布局界面布局设计-相关布局XML属性说明android:layout_marginLeft当前组件左侧的留白android:layout_marginRight当前组件右侧的留白android:layout_marginTop当前组件上方的留白android:layout_marginBottom当前组件下方的留白android:layout_margin当前组件上下左右四个方向的留白相对布局中描述四周留白的属性,以像素为单位界面布局设计-相关布局在进行相对布局时要注意以下规则相对布局的子组件必须有唯一的id属性以使规则正确应用当心循环规则,循环规则发生在两个组件具有互相指向时保持相对布局规则最小化,能减小出现循环规则的机率并且使得布局更加可维护和灵活测试布局设计在横屏和竖屏模式下,以及在不同的屏幕大小和解决方案下是不是符合预期使用相对布局代替嵌套线性布局以改进程序性能和响应能力界面布局设计-相关布局界面布局设计-绝对布局AbsoluteLayout指定界面元素的坐标位置自Android2.0版本开始不再推荐使用复用XML布局文件较少代码冗余、提高维护性include标签引入布局文件merge标签复用另外的布局时,在布局层次中消除多余的布局元素复用XML布局文件:includeinclude标签复用XML布局文件:mergemerge标签当在布局文件中复用另外的布局时,merge标签能够在布局层次中消除多余的布局元素,增加UI效率。控制视图界面的其他方法:代码控制视图界面类似JavaSwing那样完全通过代码控制视图界面创建布局管理器,设置布局管理器的属性创建视图组件,设置组件的布局和各种属性将创建的具体组件添加到布局管理器中缺点样式调整复杂、不利于修改、解耦等控制视图界面的其他方法:代码控制视图界面过程问题:布局中组件的对齐方式、权重等复杂属性如何设置?//创建线性布局、设置颜色、布局方向等LinearLayoutlLayout=newLinearLayout(this);lLayout.setBackgroundColor(0xFFFFFAE4);lLayout.setOrientation(LinearLayout.VERTICAL);//创建图片对象、设置图片资源、设置间距ImageViewiv=newImageView(this);iv.setImageResource(R.drawable.spainfo);iv.setPadding(2,2,2,2);//在布局增加图片组件lLayout.addView(iv);//将主布局加启动页面setContentView(lLayout);控制视图界面的其他方法:代码控制视图界面布局参数类LayoutParams:权重、在布局中的位置等属性//创建保存图片布局参数的对象(组件放到哪个布局中就用哪个布局的内部类)LinearLayout.LayoutParamsivLp=newLinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);//设置图片对齐方式ivLp.gravity=Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL;ImageViewiv=newImageView(this);//创建图片对象iv.setImageResource(R.drawable.spainfo);//设置图片资源iv.setPadding(2,2,2,2);//依次设置图片的左、上、右、下间距iv.setLayoutParams(ivLp);//设置图片参数对象控制视图界面的其他方法:代码控制视图界面控制视图界面的其他方法:联合控制视图界面将变化小、行为固定的组件设置在XML布局文件中把变化较多、行为控制比较复杂的组件通过Java代码来管理多界面的使用界面间传递数据一般使用以下四个步骤1.创建Intent实例,通常采用如下三种方式:(1)在Intent构造方法中指定当前Activity和需打开的Activity。Intentintent=newIntent(A.this,B.class);其中A.class表示当前Activity类,B.class表示需打开的Activity类。(2)通过Intent的setClass()方法指定当前Activity和需打开的Activity。Intentintent=newIntent();intent.setClass(A.class,B.class);(3)通过Intent的setClassName()方法指定当前Activity和需打开的Activity。Intentintent=newIntent();intent.setClassName(A.this,package.B);第一个参数为当前Activity类名,第二个参数为“包名.类名”。多界面的使用2.封装数据:(1)使用Intent对象封装(2)Bundle对象封装3.打开下一Activity界面:(1)startActivity(Intentintent)(2)startActivityForResult(Intentintent,intrequestCode)4.在打开的下一界面中接收数据:Intentintent=getIntent();Stringname=intent.getStringExtra(name);多界面的使用多界面的使用使用Intent封装数据接收Intent的封装的数据intent.putExtra(name,张三);intent.putExtra(age,20);Intentintent=getIntent();//获取Intent对象Stringname=intent.getStringExtra(name);多界面的使用使用Bundle封装数据Bundle是用于不同Activity之间的数据传递类,其常用方法如表属性值说明clear()清除此Bundle映射中的所有保存的数据clone()克隆当前BundlecontainsKey(Stringkey)返回指定key的值getString(Stringkey)返回指定key的字符hasFileDescriptors()指示是否包含任何捆绑打包文件描述符isEmpty()如果这个捆绑映射为空,则返回trueputXX

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功