350 likes | 554 Views
第三章 Android 高级组件介绍. 倚动软件工厂实验室. 主要内容. 基本图片控件. 图片视图 ImageView : ImageView 继承自 View 组件,它的主要功能是用来显示图片。. 1. android:scaleType 属性,设置所显示的图片如何缩放或移动以适应 ImageView 的大小。常见属性值如下: fitCenter : 保持纵横比缩放图片,直到该图片能完全显示在 ImageView 中,缩放完成后将该图片放在 ImageView 的中央。
E N D
第三章Android高级组件介绍 倚动软件工厂实验室
基本图片控件 图片视图ImageView:ImageView继承自View组件,它的主要功能是用来显示图片。 1 • android:scaleType属性,设置所显示的图片如何缩放或移动以适应ImageView的大小。常见属性值如下: • fitCenter:保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后将该图片放在ImageView的中央。 • fitXY:对图片横向、纵向独立缩放,使得该图片完全适应于该ImageView,图片的纵横比可能会改变。 • centerCrop:保持纵横比缩放图片,以使得图片能完全覆盖ImageView。
基本图片控件 fitCenter效果(默认) centerCrop效果 fitXY效果
基本图片控件 图片按钮ImageButton:作用和Button的作用类似,只是ImageButton用图片作为按钮组件,与Button的区别如下: 2 • 继承的父类不同 • 外观显示上的差别
基本图片控件 ImageButton中src和background区别: • src是图标,background是背景。图标是中间的一块区域,而背景是控件能看到的范围。 • 简单说来,一个是前景图(src),一个是背景图(background),且用src的时候是原图显示,不改变图片的大小;用background的时候,会按照组件的大小来放大或者缩小图片。 • 假设ImageButton的宽高是100x100,而我们要加上去的图片宽高是80x80。如果用src进行设置,则图片会按80x80 居中绘制上去。如果你使用的是background ,则加上去的图片宽高会被拉伸成100x100。
基本图片控件 案例: 图片浏览器 本例的图片浏览器不仅可以浏览图片还可以改变所查看图片的透明度,以及通过一个小区域来显示图片的原始信息。
图片组件 3 图像切换器ImageSwitcher:主要功能是完成图片的切换显示。 • 用户浏览图片时,可以通过按钮点击图片进行切换显示,而且在每次切换时,可以为其增加一些动画效果。 • 在使用ImageSwitcher切换图片时,可通过Animation指定切换图片时的动画效果,但要想取得Animation类的对象,则需要调用AnimationUtils类来完成。
图片组件 • android.R • 在使用loadAnimation()方法创建Animation对象的时候需要指定操作的资源类型,这些类型可以直接从android.R这个类中定义的常量找出,本次程序将使用以下两个资源常量: • 淡入效果:public static final int fade_in; • 淡出效果:public static final int fade_out; • ViewSwitcher.ViewFactory • ImageSwitcher是通过setFactory()方法来创建两个需要切换的视图。该方法需要传递一个ViewFactory类型的参数,而ViewFactory是ViewSwitcher类的一个内部接口,该接口内包含一个makeView()方法,用于创建一个视图。
图片组件 • ViewFactory接口使用 • private class ViewFactoryImpl implements ViewFactory { • public View makeView() { • ImageView img = new ImageView(MyImageSwitcherDemo.this); • //实例化图片显示 • img.setBackgroundColor(0xFFFFFFFF); // 设置背景颜色 • img.setScaleType(ImageView.ScaleType.CENTER); // 居中显示 • img.setLayoutParams(new ImageSwitcher.LayoutParams • (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); //定义组件return img; • } • }
图片组件 4 画廊视图Gallery 在Android中使用一些工具能方便地进行图片的拖拽浏览,其中Gallery组件就是一个比较好的工具,使用Gallery组件可以定义一组图片浏览框,如图所示,可以降低开发者开发图片浏览功能的难度。
图片组件 Gallery适配器 在使用Gallery设置图片集的时候需要使用setAdapter()方法,此时设置的是SpinnerAdapter接口的对象,主要功能是定义一组要显示图片的适配器,而对于这种适配器操作有两种可选方式: 方式一:用一个自定义的类直接继承SpinnerAdapter接口的子类 —— android.widget.BaseAdapter类实现,这样用户只需要覆写核心操作方法即可,不需要的方法可以不用覆写。 方式二:直接使用SimpleAdapter类完成。
图片组件 该示例综合运用ImageSwitcher组件和Gallery组件。其中Gallery组件用于存放一组图片,并提供拖拽浏览功能,而ImageSwitcher组件,则显示选中的图片,并为图片的切换添加一些动画效果。
列表组件 • 列表视图是Android系统中比较常用的视图组件,它的构建主要包含两方面信息:数据显示的布局文件和数据源。 • 这两者之间通过适配器(Adapter)建立关联,适配器充当着媒人的角色,在为数据显示的布局文件和数据源介绍亲事之前,媒人需要对双方有所了解,包括每一项的布局信息以及数据源的实体信息。
列表组件 常见Adapter的继承结构图
列表组件 • ArrayAdapter:默认情况下只能显示文本,如果想显示其他的View控件,比如ImageView需要重写getView()方法,通常是将一个数组或者集合放在ArrayAdapter中。 • SimpleAdapter:是一个简单的Adapter,它可以将静态的数据关联到XML布局文件中的某个View控件上,可以将列表中的数据指定为Map对象的集合。Map对象中的每一个键对应于列表中的每一项的一部分数据。而Map对象则包含了每一项的所有数据。也需要在XML文件中定义每一项数据的显示视图(控件),并且要与Map对象中的关键字(键)建立一一映射关系。
列表组件 Spinner运行效果图 AutoCompleteTextView运行效果图
列表组件 复杂ListView效果图 简单ListView效果图
列表组件 使用SimpleAdapter可以自定义ListView的列表项,需要5个参数: 第一个参数:context对象; 第二个参数:List<? ExtendsMap <String,?>>集合对象; 第三个参数:指定一个界面布局的ID; 第四个参数:是一个String[]类型的参数; 第五个参数:是一个int[]类型的参数。
列表组件 问题与讨论 尝试实现以左图的界面显示列表项。
列表组件 ExpandableListView扩展下拉列表 通过实现BaseExpandableListAdapter类,自定义每一组及每一项的显示。关键是重写以下两个方法。 getGroupView getChildView 注意:SimpleExpandableListAdapter可以实现扩展下拉列表的功能,但是不能显示图片
对话框组件 • 在图形界面之中,对话框也是人机交互的一种重要形式,程序可以通过对话框对用户进行一些信息的提示,而用户也可以通过对话框和程序进行一些简单的交互操作。 • 在Android的开发之中,所有的对话框都是从 android.app.Dialog类继承而来。 警告框(AlertDialog) 警告框(AlertDialog)是在项目中出现的最简单的一种对话框,主要的目的是为用户显示一条警告信息。 AlertDialog也是在对话框中使用最多的一个类,而且是Dialog的直接子类。
对话框组件 简单提示对话框 单选列表对话框 多选列表对话框
对话框组件 自定义输入对话框框 自定义列表对话框
对话框组件 如果要想实例化AlertDialog类往往都依靠其内部类:AlertDialog.Builder完成。使用AlertDialog创建对话框大致按如下步骤进行: 第1步:创建AlertDialog.Builder对象,该对象是AlertDialog的创建器。 第2步:调用AlertDialog.Builder方法为对话框设置图标、标题、内容等。 第3步:调用AlertDialog.Builder的create()方法创建AlertDialog对话框 第4步:调用AlertDialog的show()方法显示对话框。
对话框组件 程序解读 对Builder对象方法返回类型的理解。 当程序中存在两个名称相同,包不同的类或接口时,应该怎么办? 对话框中包含三种类型的按钮,能否重复添加?按钮有什么作用? 如何解决单击Back建退出对话框的问题?
菜单 • 菜单简介 • 菜单是一种比较通用的用户组件,大部分软件都有该组件,它提供了熟悉的、一致的用户体验,在Android中,可以使用菜单表示当前Activity的一些可选的操作。 • Android3.0以后,Android设备不再要求提供专门的菜单按钮。随着这一变化,android应用不再依赖过去的包含6个菜单项的面板,取而代之的是通过操作栏(ActionBar)来显示一些通用的用户动作。 • 在Android系统之中,菜单一共有三类:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。
菜单 Android 2.3桌面默认的选项菜单 菜单显示在操作栏上的效果
菜单 • 选项菜单:OptionsMenu • 选项菜单是一个最基本的菜单,如果要想实现选项菜单,则直接在程序之中覆写android.app.Activity类的如下几个方法: • public boolean onCreateOptionsMenu(Menu menu):在此方法之中设置多个菜单项(MenuItem);返回值:返回true表示显示菜单,反之则不显示; • public boolean onOptionsItemSelected(MenuItem item):此方法判断菜单项的操作; • public void onOptionsMenuClosed(Menu menu):当菜单关闭时触发此操作; • public boolean onPrepareOptionsMenu(Menu menu):在菜单显示前触发此操作;返回值:返回true则继续调用onCreateOptionsMenu()方法,反之则不再调用。
菜单 创建菜单的两种方式 • 通过XML资源文件进行创建 • 通过代码进行创建 使用XML资源文件的优势 • 在XML文件中,很容易看出菜单的结构; • 菜单资源文件将菜单的内容和应用程序的代码分离开来; • 它允许你为不同的平台、不同的屏幕以及不同的配置的手机创建相应的菜单配置文件,可扩展性好。
菜单 注意: (1)添加菜单图标后,菜单文字不再显示,长按该菜单会显示菜单的标题文字; (2)若不为菜单项设置orderInCategory属性,该属性值默认为0,当包含多个相同值时,会根据其在XML文件中,声明的先后顺序进行显示。
菜单 上下文菜单:ContextMenu 上下文菜单与我们电脑上的右键快捷菜单非常相似,在Android中,当用户长按某一控件时,会弹出上下文菜单(前提是该控件注册了上下文菜单)。 开发上下文菜单的步骤如下: a、重写Activity的onCreateContextMenu(ContextMenu menu,View source, ContextMenuInfo menuInfo)方法; b、调用Activity的registerForContextMenu(View view)方法为view组件注册上下文菜单。 c、如果希望应用程序能为菜单项提供响应,可以考虑重写onContextItemSelected(MenuItem mi)方法,或为指定菜单项绑定事件处理器。
菜单 上下文菜单 运行效果图