• 1. 智能手机应用开发based on android 2011.5
  • 2. 内容包括: 1、Android 平台概述 2、搭建 Android 开发环境 3、第一个 Android 应用程序 4、Android 用户界面设计 5、Activity、Intent、Service、Broadcast Receiver 6、Android 中的数据存取 7、Android 的多媒体应用 8、应用实例:a、b、c、d
  • 3. 课程结构开放手机联盟(OHA) Android 平台综述: 平台介绍、开发者社区 开发环境: 构建 Android 开发环境 应用程序: 应用程序结构 典型应用: 用户界面、图形编程 数据存取、网络连接 硬件访问平台综述 开发环境程序结构数据存取网络连接硬件访问图形编程用户界面
  • 4. 获取 Android 资料的途径http://developer.android.com http://androidappdocs.appspot.com 下载 sdk 等相关软件 查看文档 在线帮助 开发社区 国内需要代理才能访问 http://www.android123.com.cn/ news sdk下载 开发FAQ、源码下载 移植
  • 5. 4、Android 用户界面设计on android
  • 6. User Interface:用户界面UI 布局管理、事件响应机制:参考 Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 7. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 8. UI:布局管理 Layout Layout:组件在 Activity 中的呈现方式即为“布局”      布局中需要描述组件的大小、间距、对齐方式等 Layout 的创建: 首先将需要呈现的组件在 xml 配置文件中进行声明 然后在程序中通过 setContentView(View) 方法将视图呈现在 Activity中 最后通过 findViewById(Id) 方法获得各组件实例
  • 9. UI:布局管理 Layout 所有 UI 类均源于 View、ViewGroup, View 的子类称为组件(Widget), ViewGroup 的子类称为布局(Layout) ViewGroup 通过各种 Layout,控制所属 View 的显示位置,形成图示的组合设计  模式(Composite): ViewGroup (Layout)ViewViewViewViewViewViewGroup (Layout)
  • 10. UI:Layout 的种类LinearLayout FrameLayout TableLayout RelativeLayout AbsoluteLayout ListLayout RadioGroup GridView ………
  • 11. 实例:TextView、Button、 ImageView 等各个组件按线性布局垂直摆放线性布局 LinearLayout
  • 12. UI:LinearLayout线性布局 LinearLayout 方向:android:orientation="vertical "     android:orientation="horizontal " 对齐:android:gravity="top " (bottom/left/right) 大小:android:layout_width="wrap_content "    android:layout_width="fill_parent "
  • 13. UI:FrameLayout从屏幕左上角 (0,0) 坐标开始布局 所有组件都钉到屏幕的左上角 不能为组件指定位置,所有组件均在 (0,0) 坐标放置 多个组件层叠排序,后面的组件覆盖前面的组件
  • 14. UI:TableLayout以行、列表格的形式布局各组件 使用 TableRow 对象来定义多行 单元格不能横跨行 不显示行、列或是单元格边界线
  • 15. UI:AbsoluteLayout需明确指明各组件确切的屏幕坐标(X,Y) (0,0) 为左上角,组件下移或右移时,坐标值增加 注意: 不建议使用 AbsoluteLayout 除非有很好的理由,因为绝对布局在不同尺寸和分辨率的设备显示中不能很好地工作 Android 2.0 API 文档中标示:绝对布局已过时
  • 16. UI:RelativeLayout指明各组件相对于其他组件(通过 Id)或相对于父布局对象的位置,跟 AbsoluteLayout 相反 在 RelativeLayout 布局里的各控件具备多种排列属性: Layout above:控件在指定控件的上方 Layout below:控件在指定控件的下方 Layout to left of …… 使用 RelativeLayout 布局的时候,程序运行时应尽量不去更改各组件的相对布局,以免组件间布局冲突
  • 17. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 18. UI:事件处理机制引用了 Java 中的事件处理机制,Android 中事件处理同样包括三个部分:    事件源:产生事件的组件、硬件、资源等    事件:单击事件、焦点事件、按键事件、触碰事件等    事件监听器:Listener
  • 19. UI:Listener常用的事件处理方法: OnClickListener() OnFocusChangeListener() OnKey() OnTouch()……button0=(Button)findViewById(R.id.button0); button0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(MainActivity.this, Common_Widget_Test.class); startActivity(intent); } });
  • 20. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 21. UI:关于 Icon应用程序需要各种各样的图标:icon 文件 icons 要有多样化的形状和样式,但又要形成统一的视觉风格,其尺寸和定位也需要统一: 红色边框为图标尺寸 蓝色边框是图形尺寸,比图标尺寸稍小,图形之外的空间用于显示阴影和特殊效果。 橙色边框是另外一种图形尺寸。两种类型的图形尺寸可以达到统一的视觉权重。
  • 22. UI:Icon 的风格符合当下的流行趋势,避免过度使用隐喻 高度简化和夸张,小尺寸图标也能易于识别,不宜太复杂 尝试抓住程序的主要特征,比如音像作为音乐的icon 使用自然的轮廓和形状,看起来几何化和有机化,不失真实感。 采用前视角,几乎没有透视,光源在顶部。 不光滑但富有质感。
  • 23. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 24. UI:关于 MenuAndroid 系统提供三种菜单:    options menu(选项菜单)通过点击 MENU 键来显示    context menu(上下文菜单)在某 View 上长按 2s 后显示    sub menu(子菜单)显示为浮动列表,在以上两种菜单的菜单项被选中时显示出来;    前二者都有可以嵌套子菜单,而子菜单本身不能再嵌套 Android 系统具备对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组;菜单项分组后,可以调用 setGroupCheckable、setGroupEnabled、setGroupVisible 等方法来统一设置整个菜单项分组的属性,而无须一个一个单独设置
  • 25. UI:options menu 主菜单options menu 显示在屏幕下方,最多只能显示 6 个菜单项,称为 icon menu(不支持 checkable 属性);其余菜单项会以 more icon menu 来调出,称为 expanded menu options menu 通过 Activity 的 onCreateOptionsMenu 方法来生成,这个函数只会在 menu 第一次生成时调用 可在 menu 显示前调用 onPrepareOptionsMenu 方法来实现对菜单的更改 onOptionsItemSelected 方法在选中菜单项后被调用,实现菜单项的响应
  • 26. UI:sub menu 子菜单一个浮动菜单列表,通过在选项菜单或上下文菜单选择菜单项显露出来 不支持嵌套子菜单 // 其他的 item 定义 // 其他的 item 定义
  • 27. 实例:Test_of_WidgetMainActivity.java 中指定主菜单 xml 文件 重写 onOptionsItemSelected() 方法public boolean onCreateOptionsMenu(Menu menu) { menuInflater.inflate(R.menu.menu_filesystem, menu); return true; }public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.about: aboutAlert("使用xml实现菜单");break; case R.id.exit: exitAlert("确认要退出吗?");break; } return true; }private void aboutAlert(String msg){ …… } private void exitAlert(String msg){ …… }
  • 28. \res\menu\menu_filesystem.xml 定义菜单 ...
  • 29. 运行结果:
  • 30. 运行结果:
  • 31. UI:context menu 右键菜单context menu 是跟某个具体的 View 绑定在一起的 在 Activity 中用 registerForContextMenu 方法来为某个 View 注册 context menu context menu 在显示前都会调用 onCreateContextMenu 方法来生成 menu @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { menu.add(0, ITME1, 0, "红色背景"); menu.add(0, ITME2, 0, "绿色背景"); menu.add(0, ITME3, 0, "蓝色背景"); }registerForContextMenu(textView00);
  • 32. onContextItemSelected 方法处理菜单项选中事件@Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case ITEM1: textView00.setBackgroundColor(Color.RED);break; case ITEM2: textView00.setBackgroundColor(Color.GREEN);break; case ITEM3: textView00.setBackgroundColor(Color.BLUE);break; } return true; }private static final int ITEM1 = Menu.FIRST; private static final int ITEM2 = Menu.FIRST+1; private static final int ITEM3 = Menu.FIRST+2;
  • 33. 运行结果:
  • 34. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 35. UI:关于 DialogAndroid 中对话框主要有:普通对话框、选项对话框、单选多选对话框、进度对话框、日期对话框、时间对话框等 在程序中可以通过方法 onCreateDialog 来完成对话框的创建,调用 showDialog 方法传入对话框的id来显示指定对话框 关闭对话框可用 dismiss 方法实现,也可以调用 removeDialog 方法来彻底释放对话框 onDismissListener 方法可在关闭对话框时执行一些特定工作
  • 36. 实例:Test_of_Widgetbutton1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(0); } }); protected Dialog onCreateDialog(int id) { ProgressDialog pD = new ProgressDialog(this); pD.setIcon(R.drawable.icon); pD.setTitle("ProgressDialog测试"); pD.setIndeterminate(true); pD.setMessage("我只是测试代码,看看...."); pD.setCancelable(true); pD.setButton(Dialog.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } } ); return pD; }
  • 37. UI:Dialog
  • 38. UI:Dialog
  • 39. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 40. UI:关于 ToastToast:    当用户执行某一动作后,系统自动显示提示信息,显示一段时间后自动消失,是为 “Toast” 程序中创建 Toast: 调用 Toast 的静态方法 makeText() 设置现实文本和时长 调用 Toast 的 show() 方法显示
  • 41. 实例:Test_of_Stringfinal int l = Toast.LENGTH_LONG; final int s = Toast.LENGTH_SHORT; final String s1 = "我会多显示一会儿,呵呵"; final String s2 = "我少显示一会儿,呵呵"; button1.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast t1 = Toast.makeText(getApplicationContext(),s1,l); t1.show(); } }); button2.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast t2 = Toast.makeText(getApplicationContext(),s2,s); t2.show(); } });
  • 42. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 43. UI:关于 Style & Theme风格(style),是指能应用于布局文件中的单一组件的一套格式属性集合。比如为一个 TextView 组件定义一套风格并在其中指定字体的大小和颜色。 主题(theme),是指能应用于一个或者多个 Activity 的一套格式属性的集合。比如定义一个主题,指定窗口框架颜色和面板的前景色和背景色,并且为菜单指定字体的颜色和大小,应用于一个 Activity。
  • 44. UI:Style            30px    #FFFF0000    bold serif            设置字体、字号、颜色、加粗
  • 45. UI:Theme //仅应用到单一 Activity   //应用到整个程序所有 Activity  设置背景图片、无窗口框、无标题、设置前景色、全屏
  • 46. UI:Color 常量android.graphics.Color 中定义了颜色值 Color.BLACK Color.BLUE Color.CYAN Color.DKGRAY Color.GRAY Color.GREEN Color.LTGRAY Color.MAGENTA Color.RED Color.TRANSPARENT Color.WHITE Color.YELLOW
  • 47. User Interface:用户界面UI 布局管理、事件响应机制:Java 的 UI 设计思想 布局管理 Layout 事件响应 Listener 图标 Icon 菜单 Menu 对话 Dialog 提示 Toast 风格和主题 定制组件 Widget
  • 48. UI:关于 Widget Widget 是 Android 1.5 引入的新特性,允许程序显示一些常用而又重要的信息在用户的桌面主屏上 标准的 Android 系统映像包含了一些示例 widgets,包括指针时钟、音乐播放器和其他工具如 Google 搜索栏 Widget 即是可由用户自己编写的功能控件 用户在主屏幕(HomeScreen)的空白区域长按,选择菜单的 Widgets 项,即可选取所需的控件显示在主屏幕上 用户可自行设计一个 Widget,使得和其它 Widget 以及主屏幕其它元素保持风格一致
  • 49. UI:Widget 设计典型的 Android Widget 主要有三个组成部分:一个限位框,一个框架,还有 Widget 的图形控件以及其它元素 设计周全的 Widget 会在限位框边缘与框架之间,及框架内边缘与 Widget 的控件之间都保留一些内填充(内补白) Widget 的外观应被设计得与主屏幕的其它 Widget 相匹配,并以主屏幕的其它元素为依据对齐,也应使用标准的阴影效果 更多信息,可参考开发者指南的 AppWidgets 章节
  • 50. UI:不同方向的 Widget
  • 51. thanks