Introduction Android 应用开发课程介绍 本课程旨在通过 6 个基本任务和相关的知识点, 让学习者在短时间内通过任务驱动的方式快速学习掌握 Android 的基本编程 本在线教程与温州大学 SPOC 对接, 可在 SPOC 中观看具体的视频, 帮助完成实现各基本任务 本在线教程目前

Size: px
Start display at page:

Download "Introduction Android 应用开发课程介绍 本课程旨在通过 6 个基本任务和相关的知识点, 让学习者在短时间内通过任务驱动的方式快速学习掌握 Android 的基本编程 本在线教程与温州大学 SPOC 对接, 可在 SPOC 中观看具体的视频, 帮助完成实现各基本任务 本在线教程目前"

Transcription

1 目錄 Introduction 认识 Android 开发 (Eclipse 版 ) 任务 1:UI 布局编程任务 1- 具体任务任务 1 知识点任务 2:UI 列表编程任务 2- 具体任务任务 2 知识点任务 3:UI 菜单编程任务 3- 具体任务任务 3 知识点任务 4:Http 编程任务 4- 具体任务任务 4 知识点任务 5: 数据库编程任务 5- 具体任务任务 5 知识点任务 6:Excel 文件读写操作任务 6- 具体任务任务 6: 知识点系统联系人的操作

2 Introduction Android 应用开发课程介绍 本课程旨在通过 6 个基本任务和相关的知识点, 让学习者在短时间内通过任务驱动的方式快速学习掌握 Android 的基本编程 本在线教程与温州大学 SPOC 对接, 可在 SPOC 中观看具体的视频, 帮助完成实现各基本任务 本在线教程目前只是一个粗糙的版本, 希望在今后的课程中, 通过学习者 校内任课教师 校外合作单位任课教师的共同在线编辑协助, 实现一个完整的教程以及知识的迭代更新 Eclipse 开发工具可在百度盘中下载 : 链接 : 密码 : wgx6 内含 JDK1.7 2

3 认识 Android 开发 (Eclipse 版 ) 编写第一个 Hello 程序 著者 : 温州大学 - 童长飞 学习引导 若是第一次接触 Android 开发, 建议先观看学习引导视频 1. 工程项目文件的认识 源程序 src 目录.java 文件 UI 布局文件布局文件布局文件位置 :res->layout, xml 布局文件在程序中的引用方式 :R.layout.xxx, xxx 为 xml 的文件名注意 :xml 文件不能大写, 建议纯小写英文和下划线 '_' 以及数字的组合 UI 布局文件的对象在源程序中必须在 setcontentview() 之后才能被引用 UI 控件可通过 findviewbyid() 将程序中的对象与布局文件中的对象挂钩起来 ( 需要强制类型转换成匹配的对象 ) R 引用对象由项目自动生成在 res 文件夹下的资源会在 gen->r.java 文件中自动生成对应资源的引用对象 2. Button 按钮 常用触发方法 onclick() 触发方法的常用实现方式 setonclicklistener 匿名接口实现 ( 推荐 ) 3

4 认识 Android 开发 (Eclipse 版 ) 具体见程序举例 - 方法 2 在 xml 布局文件中指定函数实现 ( 推荐 ) xml 中 Button 对象增加属性 android:onclick="bt1onclick" 代码中实现 bt1.onclick(view V) 函数具体见程序举例 - 方法 1 在 Activity 类里直接 Implements 实现 ( 使用较少 ) 具体见程序举例 - 方法 3 程序举例 按向导生成应用程序后, 在 Activity 的主布局文件中通过可视化 UI 工具插入 Button 组件 Button 的响应事件处理, 常用两种方法方法 1: 直接在 xml 中指定响应事件的函数方法 2: 对 Button 对象通过设置侦听接口 ( 接口的实现往往采用匿名的方式 ) 方法 1 布局文件 XML 对应组件核心内容 <Button android:layout_height="wrap_content" android:layout_width="match_parent" android:text=" 更新时间 " android:onclick="bt1onclick" android:id="@+id/button01"></button> 方法 1 对应的函数 ( 在 Activity 中实现 ) public void bt1onclick(view v){// 注意必须是 public 属性, 否则 xml 文 件中的 onclick 指向函数访问不到该函数, 并且必须有 View 的传递参数 Toast.makeText(this, "Hello Android", Toast.LENGTH_SHORT ).show(); 方法 2 对组件对象直接设置接口实现 ( 匿名实现 ) 4

5 认识 Android 开发 (Eclipse 版 ) Button bt1=(button) findviewbyid(r.id.button01); bt1.setonclicklistener(new OnClickListener() {// 通过匿名的 public void onclick(view v) {// 按钮按下所触发的事件 // TODO Auto-generated method stub Toast.makeText(buttonAct.this, "Hello Android", Toast.LENGTH_SHORT).show(); ); 方法 3 对组件对象直接设置接口实现 ( 类中实现接口 ) public class buttonact extends Activity implements View.OnCl public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); Button bt1=(button) findviewbyid(r.id.button01); bt1.setonclicklistener(this); public void bt1onclick(view v){ Toast.makeText(this, "Hello Android", Toast.LENGTH_SHORT public void onclick(view v) { // TODO Auto-generated method stub bt1onclick(v); 5

6 认识 Android 开发 (Eclipse 版 ) 3. Toast 显示一段时间自动消失的消息框采用静态方法实现 public static Toast maketext (Context context, CharSequence text, int duration) context: 上下文, 一般用 this 指向在匿名函数时,this 指向函数的接口, 而非 Activity, 此时要用 Activity 类的 this 指向例如在方法 2 的匿名实现中,Toast 的上下文直接用 this 会出错, 必须用 Activity 类.this( 本例中是 buttonact.this) CharSequence text: 需要显示的文本 int duration: 只有长和短之分 Toast.LENGTH_LONG 显示时间长 Toast.LENGTH_SHORT 显示时间短 Toast 要显示出来, 必须调用.show() 方法, 否则不会显示 4. 必须掌握的 Eclipse 快捷键 alt+/ 自动代码补全 ctr+7 快速单行代码注释或取消注释 ctr+i 代码格式对齐 ctr+shift+f 代码规整, 即去掉不必要的空行, 代码格式对齐等 ctr+1 代码修正提示 ctr+t 查看继承关系 Alt+Shift+R 重命名变量或类 ( 非常有用 ) ctr+o 显示类中方法属性和大纲查找 bug 时非常有用 ( 函数列表 ) 多按一次 Ctrl+O 列出更多的内部变量 f3 跳到函数定义 f11 调试 f6 单步调试 ctr+f11 运行 ctr+shift+l 调出快捷键提示 ctr+2,l 命名给局部变量 Ctrl+Alt+Down 即可以在鼠标下面一行快速复制当前行 Ctrl+Alt+Up 即可以在鼠标上面一行快速复制当前行 6

7 认识 Android 开发 (Eclipse 版 ) 5. 内容补充 -Android 程序各目录角色 src/ *.java 文件源码文件 gen/ R.java 自动生成的资源代码 res/anim/ *.xml 动画设置文件 res/drawable.png,.jpg, *.gif 应用程序图像 res/layout main.xml 窗口布局文件 res/values arrays.xm 数组定义文件 colors.xml 绘图演示定义文件 dimens.xml 尺寸定义文件 strings.xml 文字资源文件 styles.xml 样式定义文件 res/xml *.xml 程序运行时需读取的 XML 文件 7

8 认识 Android 开发 (Eclipse 版 ) res/raw *.raw 程序运行时所应用的资源文件 ( 如音效文件 ) AndroidManifest.xml 应用程序设置文件 default.properties 定义 SDK 版本文件 8

9 任务 1:UI 布局编程 任务 1:UI 布局编程 具体任务 任务 1 知识点 9

10 任务 1- 具体任务 任务 1- 具体任务 编写一个程序, 在一个垂直布局 LinearLayout 里有 4 个水平布局的 LinearLayout 和 2 个 TextView 第一个水平布局的 LinearLayout 里面有 1 个 TextView 部件和 EditText 部件, 其中 TextView 和 EditText 按 1:3 分布,TextView 文字右对齐 ; 第二个水平布局的 LinearLayout 里面依次放有 1 个 Button 和 1 个 TextView 部件,Button 点击后能把第一个水平布局里的 EditText 的内容更新到 Button 右边的 TextView 部件上 ; 第三个水平布局的 LinearLayout 里有一组 RadioButton( 三个组件所占空间平均分配 ); 第四个水平布局的 LinearLayout 里有三个 Checkbox( 三个组件所占空间平均分配 ; 最后 2 个 TextView, 能分别显示 RadioButton 和 CheckBox 的选中状态 作品效果参考 10

11 任务 1- 具体任务 11

12 任务 1 知识点 任务 1 知识点 著者 : 温州大学 - 童长飞 UI 基本部件编程本笔记相关例程 : S1_scrollView S1_TableLayout S2_checkbox S2_EditText S2_RadioButton S1_ImageView 1. xml 布局中的常用属性 xml 属性设置可以通过 alt+\/ 自动代码提示来完成 xml 中可使用 <!-- --> 标签来注释内容, 且该注释必须在其它标签属性之外 android:orientation 控制容器内控件的摆放顺序 vertical: 从上往下摆放 horizontal: 从左到右摆放 android:layout_width 控制容器的宽度 fill_parent 或 match_parent 填充父类 wrap_content 包围内容, 即内容有多宽, 容器就有多宽 12

13 任务 1 知识点 android:layout_gravity 该部件相对容器的对齐方式在 eclipse 下可通过 alt+\/ 自动代码提示选择或在可视化界面下通过属性设置实现可选多个属性用 " " 分开注意 : 该功能在一些场合下可能会失效, 尤其是容器的方位和该组件 layout_gravity 属性是平行时往往会失效例如 : 容器为线性布局,android:orientation="horizontal"; TextView 的属性 android:layout_gravity="right", 则 TextView 在线性布局中右对齐设置的属性会失效, 此时可对容器的 gravity 属性进行设置以达到布局要求 android:gravity 部件内的内容相对于该部件的对齐方式 android:gravity 与 android:layout_gravity 区别扩展阅读布局举例 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textview1" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_gravity="right" android:gravity="center" android:text="textview" /> </LinearLayout> 布局分析 : 在该布局中,TextView 在 LinearLayout 右对齐, 而 TextView 中 的文本则居中对齐, 效果图如下 : 13

14 任务 1 知识点 android:id 该部件的 id 值, 一般自动生成 android:text 部件的文本属性, 一般用于 Button TextView EditText 等控件可以直接输入文本, 也可以采用 "@string\/ 在 string.xml 中定义的变量字符串名 " 入门时可直接输入文本, 规范化开发建议采用 "@string\/xxx" 引用的方式 android:textsize 一般用 sp 为单位, 为字号大小 像素属性不同计量单位区别的扩展阅读 14

15 任务 1 知识点 dp sp px 相对像素, 图片大小设置建议使用, 有效解决了同像素大小的图片在 不同屏幕密度下大小不同的问题 用于字体大小设置, 同样是相对像素 绝对像素, 与屏幕分辨率的像素对应, 不建议使用 android:color 扩展阅读颜色属性直接数值设置 #RGB : 一个 16 进制数代表一种颜色 ( 由红黄蓝的值构成不同颜色 ), 例如 #F00, 表示红色, 等效于 #FF0000 #RRGGBB : 两个 16 进制数代表一种颜色, 例如 #FF0080 #ARGB : A 代表一个 16 进制数表示的透明度 #AARRGGBB : AA 代表两个 16 进制数表示的透明度 android:backgroud 设置背景, 可以是图片, 也可以是颜色 android:textcolor 设置文本的颜色 android:hint 设置控件的提示语, 一般用于 EditText android:src 设置控件的图片资源 15

16 任务 1 知识点 android:autolink 设置文本的自动连接功能, 例如对文本中的电话号码 网址等自动识别 android:weight 设置权重, 指控件在容器里占剩余空间的权重一般上将控件的高 ( 或宽 ) 设置成 0dp 后再用权重若是在高度 ( 或宽度 ) 方向使用权重, 则将高度 ( 或宽度 ) 设置成 0dp 权重的值为 " 数值 ", 例如 android:layout_weight="1", 且值越大, 所占空间越大 android:margin 设置控件与容器边界的空间间隔 2. Android 常用的内置主题 Android 的主题可在 styles.xml 中设置, 并在 AndroidManifest.xml 中的 application 标签下, 通过 android:theme 属性进行引用常用的内置主题 android:theme.light : 背景为白色, 字默认为黑色 android:theme.light.notitlebar: 白景黑字, 并且无标题栏 android:theme.light.notitlebar.fullscreen : 在 android:theme.light.notitlebar 基础上, 全屏 android:theme.black : 背景为黑色, 字体为白色 android:theme.black.notitlebar : 黑景白字, 并且无标题栏 android:theme.black.notitlebar.fullscreen : 在 android:theme.black.notitlebar 基础上, 全屏 3. 认识 AndroidManifest.xml 16

17 任务 1 知识点 AndroidManifest.xml 是每个 android 程序中必须的文件 它位于整个项目的根目录, 描述了 package 中暴露的组件 (activities, services, 等等 ), 他们各自的实现类, 各种能被处理的数据和启动位置 除了能声明程序中的 Activities, ContentProviders, Services, 和 Intent Receivers, 还能指定 permissions 和 instrumentation( 安全控制和测试 ) xmlns:android 定义 android 命名空间, 一般为 " 这样使得 Android 中各种标准属性能在文件中使用, 提供了大部分元素中的数据 package 指定本应用内 java 主程序包的包名, 它也是一个应用进程的默认名称 <uses-sdk /> 定义以指定支持的最小版本, 目标版本以及最大版本,8 对应 android2.2, 18 对应 android4.3, 以此类推 <Application> 一个 AndroidManifest.xml 中必须含有一个 Application 标签, 这个标签声明了每一个应用程序的组件及其属性 android:icon 声明整个 APP 的图标, 图片一般都放在 drawable 文件夹下 android:allowbackup 控制该应用程序是否允许被备份程序及数据漏洞风险故事 android:theme 是一个资源的风格, 它定义了一个默认的主题风格给所有的 activity <Activity> 属性该应用程序中要使用的 Activity 组件均需通过该属性声明 ( 通过 android:name 设置 ) 应用程序启动时调用的 Activity 是唯一的, 称为主活动组件 ( 类似于 main 函数 ), 通过 <intent-filter> 设置 <action android:name="android.intent.action.main" /> 设置该活动为应用程序启动时首先调用的活动 (main 入口 ) <category android:name="android.intent.category.launcher" /> 设置该应用程序是否在程序列表中显示, 若无该属性, 则程序列表中不显示应用程序 17

18 任务 1 知识点 更多属性阅读 4. 线性布局 线性布局的特点容器中的控件按从左到右或从上到下的顺序排列排列方式可通过 android:orientation 属性进行设置线性布局可内嵌线性布局, 从而实现较为复杂的布局布局容器建议在可视化界面下通过拖动来实现 5. CheckBox 角色 : 多选框常用接口 :setoncheckedchangelistener 程序举例 cb1.setoncheckedchangelistener(new CompoundButton.OnCheck edchangelistener() public void oncheckedchanged(compoundbutton buttonvie w, boolean ischecked) { // TODO Auto-generated method stub String str1; if(buttonview.ischecked()){ str1="checkbox1 is checked!\n"; else{ str1="checkbox1 is not checked!\n"; tv1.settext(str1); ); 18

19 任务 1 知识点 小技巧 : 编程时在 cb1. 处通过 alt+\/, 利用自动代码补全功能, 可调出 setoncheckedchangelistener 接口, 若程序提示有错误, 可通过 ctr+1 快捷键, 根据提示导入相应的包, 并实现接口需要实现的函数 oncheckedchanged() 对 setoncheckedchangelistener alt+\/ 自动导入时默认是 OnCheckedChangeListener, 当存在 CheckBox 及其他组件时, 可能存在混淆而导致错误提示, 此时可将 OnCheckedChangeListener 强制改成 CheckBox.OnCheckedChangeListener 即可纠正 6. RadioButton 角色 : 单选框特点 : 构成一组的单选框, 若其中一个选中, 则其它的单选框则变成未选中, 因此 RadioButton 不单独使用, 与 RadioGroup 配合使用 RadioGroup 与 RadioButton 的配合使用 : 在 xml 布局文件里, 可通过可视化界面将 RadioGroup 拖进布局容器里, 再将 RadioButton 拖进 RadioGroup, 则同组的 RadioButton 构成单选约束常用接口 :setoncheckedchangelistener 该接口不是用于 RadioButton, 而是用于 RadioGroup 哪个 RadioButton 被选中的判断方法 : 通过接口中的 oncheckedchanged(radiogroup group, int checkedid) 函数判断, 即通过 checkedid 值进行判断程序举例 19

20 任务 1 知识点 er() { rb1=(radiobutton)findviewbyid(r.id.radiobutton01); rg1.setoncheckedchangelistener(new OnCheckedChangeListen heckedid) public void oncheckedchanged(radiogroup group, int c // TODO Auto-generated method stub switch(checkedid){ case R.id.RadioButton01: tv1.settext("raio1 selected"); break; case R.id.RadioButton02: tv1.settext("radio2 selectd"); break; case R.id.RadioButton03: tv1.settext("radio3 selectd"); break; default: tv1.settext(" 状态未知 "); ); 7.TextView 角色 : 文本标签, 一般不可编辑常用方法 gettext() settext() 在文本值里可用 "\n" 作为换行符 8.EditText 20

21 任务 1 知识点 角色 : 可编辑文本框在 xml 布局文件里, 可加 android:hint 属性常用方法 gettext() 获取的对象是 Editable 对象, 需通过.toString() 方法后才能当字符串使用 settext() 9. TableLayout 角色 : 表格容器特性表格行数由 TableRow 的个数决定, 每个 TableRow 组成一行表格列数由 TableRow 中最大部件个数决定 android:layout_span 控制一个部件占据的列数, 相当于合并单元格 android:layout_column 控制部件在列中的位置, 从 0 开始索引 android:stretchcolumns 控制哪一列扩展, 被扩展列将占据行中的可用空间, 从 0 开始索引 android:shrinkcolumns 控制哪一列收缩, 当内容过多时会换行, 从 0 开始索引布局示例 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android=" k/res/android" android:id="@+id/scrollview01" android:layout_width="wrap_content" android:layout_height="wrap_content" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" android:orientation="vertical" > <TextView 21

22 任务 1 知识点 android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <TableLayout android:id="@+id/tablelayout01" android:layout_width="match_parent" android:layout_height="fill_parent" android:stretchcolumns="1" > 扩展, 表格不会占据整个屏幕 --> <!-- android:stretchcolumns="1" 很重要, 若没有该列 <TableRow android:id="@+id/tablerow02" android:layout_width="wrap_content" android:layout_height="fill_parent" > <TextView android:id="@+id/textview02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 网址 :" > </TextView> 单元格 --> 数从 0 开始计数 --> <EditText android:id="@+id/edittext01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="3" android:hint=" 请输入信息 " android:text="" > </EditText> </TableRow> <!-- android:layout_span="3" 为合并单元格, 合并了 3 个 <!-- TableRow 里的信息为表格中一整行的内容 --> <!-- android:layout_column="2" 指定该列为第 2 列, 列 22

23 任务 1 知识点 <TableRow android:id="@+id/tablerow01" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="2" android:text=" 确定 " > </Button> <Button android:id="@+id/button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 取消 " > </Button> </TableRow> </TableLayout> <TextView android:id="@+id/textview01" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 初始化 " > </TextView> </LinearLayout> </ScrollView> 23

24 任务 1 知识点 视图效果 10. ScrollView 滚动容器特点当容器内部件太多, 超出手机屏幕, 可支持滚动查看, 而线性布局 表容器 相对布局等不支持滚动查看 (ListView 等除外 ) ScrollView 不建议与 ListView 等视图一起使用 11. ImageView 图片视图代码中设置图片的常用方法 setimageresource (int resid),resid 为图片资源的引用, 该方法用于图片在项目文件夹中的场合 setimageuri (Uri uri) uri 可利用 Uri.fromFile(File file) 产生一个指向文件的图片 uri, 进而实现指定文件的图片显示 12. 获得手机屏幕分辨率的方法 在某些场合下需要获得当前手机屏幕分辨率, 以更好地控制视图, 可用如下方 法实现 : 24

25 任务 1 知识点 DisplayMetrics displaymetrics1 = new DisplayMetrics();// 通过 DisplayMetrics 获取屏幕尺寸, 需要利用 Display 对象进行传递获取 WindowManager windowmanager = getwindowmanager();// 获取窗口管理器, 通过窗口管理器进一步获取 Display 对象 Display defaultdisplay = windowmanager.getdefaultdisplay ();// 获得当前窗口管理器的 Display 对象 defaultdisplay.getmetrics(displaymetrics1);// 测量窗口大小, 并将结果传递给 DisplayMetrics 对象 float screenwidth=displaymetrics1.widthpixels; float screenheight=displaymetrics1.heightpixels; 25

26 任务 2:UI 列表编程 任务 2:UI 列表编程 任务 2- 具体任务 任务 2 知识点 26

27 任务 2- 具体任务 任务 2- 具体任务 编写一个程序, 包含 1 个 Spinner,1 个 TextView,1 个 ImageView,1 个 ListView Spinner 中的内容是省份名称 (3 个省份 ),ListView 中的成员是 Spinner 所选中的省份的城市列表 (3 个城市 ),TextView 显示 Spinner 的省份和 ListView 中的选中城市名称 ( 响应 ListView 的 ItemClick 事件 ),ImageView 显示所选中城市的风景照 作品演示效果 1: 在 Spinner 中选择浙江, 列表更新为浙江的城市, 点击温州, 则图片变为温州的标志性风景图片, 并且在第一行的标签中显示所选省份和城市 作品演示效果 2: 在 Spinner 中选择安徽, 列表更新为安徽的城市, 点击黄山, 则图 片变为黄山的标志性风景图片, 并且在第一行的标签中显示所选省份和城市 27

28 任务 2- 具体任务 作品演示效果 3: 在 Spinner 中选择江苏, 列表更新为江苏的城市, 点击苏州, 则图 片变为苏州的标志性风景图片, 并且在第一行的标签中显示所选省份和城市 28

29 任务 2- 具体任务 29

30 任务 2 知识点 任务 2 知识点 著者 : 温州大学 - 童长飞 UI 列表编程 1. XML 资源的使用 在项目 res->values 目录下创建的 xml 文件, 可定义颜色 尺寸 字符串等内容, 并可在代码中通过引用使用 使用举例 (S3_xmlRes) xml 文件里可以存放数组数据 ( 可通过向导生成 ) arrays.xml 举例 30

31 任务 2 知识点 <?xml version="1.0" encoding="utf-8"?> <resources> <integer-array name="picids"> <item>@drawable/p2</item> <item>@drawable/p3</item> <item>@drawable/p4</item> <item>@drawable/p5</item> </integer-array> <string-array name="picstrings"> <item> 图片 1</item> <item> 图片 2</item> <item> 图片 3</item> <item> 图片 4</item> </string-array> <array name="mcolors"> <item>@color/mred </item> <item>@color/mblue</item> <item>@color/mgreen</item> <item>@color/mwhite</item> </array> <array name="mdimens"> <item>@dimen/msize1</item> <item>@dimen/msize2</item> <item>@dimen/msize3</item> <item>@dimen/msize4</item> </array> </resources> 是引用 res->drawable 文件夹下的 p2 图片资源,p2 可以是 png jpeg gif 等格式图片资源虽然可以用 int 型数组, 但是解析时不宜解析成 int 数据, 而是解析成 drawable 对象 colors.xml 举例文件名 colors 可以是其他符合规范的文件名, 并不会影响引用, 在 arrays.xml 文件中引用颜色资源, 颜色的 name 值, 例如引用 <color name="mred">#f00</color>, 可 31

32 任务 2 知识点 引用在程序中引用非数组的 xml 资源, 则用 R. 标签类型.name 进行引用, 但该引用仅仅是 int 型数据的资源 id 号, 要解析成标签对应的内容, 还需要 Resources 对象.getxxx 方法进行解析, 例如引用 <color name="mred">#f00</color>, 可用 R.color.mred 引用, 并用 Resources 对象.getColor(R.color.mred) 方法解析成 Color 对象 xml 文件内容 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="mred">#f00</color> <color name="mblue">#00f</color> <color name="mwhite">#fff</color> <color name="mgreen">#0f0</color> </resources> dimens.xml 举例 定义尺寸, 可用 dimen 标签 10sp 在程序中通过 getdimension 解析出的浮点数即为 10.0 <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="msize1">10sp</dimen> <dimen name="msize2">12sp</dimen> <dimen name="msize3">14sp</dimen> <dimen name="msize4">16sp</dimen> </resources> 32

33 任务 2 知识点 strings.xml 举例对一个完整的项目而言, 建议将 UI 上的文字通过 xml 文件进行设定, 并在程序或布局文件中进行引用, 以便于国际化 ( 例如发布中文版和英文版只需修改 xml 文件, 而无需对程序本身进行修改 ) 字符串采用 string 标签 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello World, xmlresact!</ string> <string name="app_name">s1_xmlres</string> </resources> 在程序中使用 xml 资源对于单个 xml 资源, 例如某个 xml 文件中的标签, 则用 R. 标签.name 来进行, 例如引用 strings.xml 文件中的 <string name="app_name">s1_xmlres</string>, 可用 R.string.app_name 对于数组 xml 资源, 则需用 Resources 对象进行解析 Resources 对象可在 Activity 中通过 get 方法直接获得, 例如 : Resources res=this.getresources(); 对于 string int 等类型的数组, 可通过 Resources 对象的 getstringarray() getintarray() 等方法获得对应数组对于其它非常规类型的数据, 例如 Color 等, 则用 obtaintypedarray() 方法获得 TypedArray 对象 ( 待解析的数组对象 ), 再对 TypedArray 对象调用 getxxx 方法获得对应类型的数据程序举例 (S3_xmlRes) 33

34 任务 2 知识点 LinearLayout ll=(linearlayout)findviewbyid(r.id.linea rlayout01); Resources res=this.getresources(); TypedArray pics=res.obtaintypedarray(r.array.picids); // 需要用 getdrawable 方法解析成图像 TypedArray colors=res.obtaintypedarray(r.array.mcolor s); TypedArray dimens=res.obtaintypedarray(r.array.mdimen s); System.out.println("test:"+res.getString(R.string.app _name)); String[] mstrings=res.getstringarray(r.array.picstrin gs); for(int i=0;i<pics.length();i++){ ImageView imv=new ImageView(this); imv.setimagedrawable(pics.getdrawable(i));// 需用相应的类型解析 getxxx 从 TypedArray 对象中提取 imv.setpadding(10, 10, 10, 10); imv.setlayoutparams(new LayoutParams(200, 200));/ / 设置宽和高 ll.addview(imv); TextView tv=new TextView(this); tv.settext(mstrings[i]); tv.settextcolor(colors.getcolor(i, R.color.mwhite )); tv.setlayoutparams(new LayoutParams(LayoutParams. MATCH_PARENT, LayoutParams.WRAP_CONTENT)); tv.setgravity(gravity.center_horizontal); ll.addview(tv); tv.settextsize(dimens.getdimension(i, R.dimen.msi ze1)); 2. ArrayList ArrayList 是 Java 中常用的列表, 为动态数组, 可随时增加和删除元素, 且 ArrayList 列表中的元素本身还可以是列表, 从而构成多维数组 ArrayList 对象的声明 :ArrayList, 其中是泛型,E 是列表里的元素的数据类型, 例如要声明 String 型的列表, 可用 ArrayList 34

35 任务 2 知识点 add 方法添加元素, 当添加的元素超过 Arraylist 预先分配的大小时, 列表会自动扩容 ( 按当前的 size 进行 2 倍扩容 ) get(int index) 方法取得元素, 其中 index 是元素在 ArrayList 中的位置索引, 从 0 开始 remove(index) 方法删除元素, 其中 index 是元素对应的位置 clone() 方法复制列表, 由于列表是对象, 在 java 中采用 A 对象 =B 对象的方式实质上是对象的引用, 当 A 对象的属性改变时,B 对象也会跟着改变, 当希望仅仅是将 B 列表的内容给 A 列表, 并且不希望 A 对象属性发生变化时 B 也跟着变化, 则需采用克隆的方法 size() 方法获得列表的长度 ( 是真实数据的长度, 而非分配空间的长度 ) 3. Spinner 下拉选择列表使用方法与 ListView 比较相似适配器, 相比 ListView, 不仅需要内容的适配, 还需要对适配器本身进行视图设置适配器对象.setDropDownViewResource() 可设置下拉时的样式常用事件 setonitemselectedlistener() 响应事件 onitemselected(adapterview<?> arg0, View arg1,int arg2, long arg3) 中,arg2 是被选中项的索引位置, 从 0 开始索引程序举例 ( 完整例程 :S5_04_simpleSpinner) 35

36 任务 2 知识点 final String[] cities={" 温州 "," 杭州 "," 宁波 "," 绍兴 "; sp1=(spinner) findviewbyid(r.id.spinner01); ArrayAdapter<String> arrayadapter=new ArrayAdapter<String >(this, android.r.layout.simple_spinner_item, cities); arrayadapter.setdropdownviewresource(android.r.layout.sim ple_spinner_dropdown_item);// 不设置该属性, 则下拉菜单很难看 sp1.setadapter(arrayadapter); sp1.setonitemselectedlistener(new OnItemSelectedListener( ) { public void onitemselected(adapterview<?> arg0, View int arg2, long arg3) { // TODO Auto-generated method stub tv1.settext(" 选择项为 public void onnothingselected(adapterview<?> arg0) { // TODO Auto-generated method stub ); 4. ListView 列表视图特点支持对数据的列表显示, 是 Android 最常用的视图之一当列表很长时, 支持上下滚动列表常与数组 ArrayList 数据库查询结果等适配显示列表需与适配器 Adapter 配合使用适配器支持改写, 从而打造用户自定义的视图列表不建议和滚动视图 ScrollView 一起使用列表布局常用的方式是 36

37 任务 2 知识点 整个页面就是 1 个列表, 此时该活动页面可采用 ListActivity, 从而无需相应的活动页面布局文件列表嵌在某活动页面里, 则活动页面布局文件中加入 ListView 组件列表常用的适配器 ArrayAdapter 常用于纯文本显示 ArrayAdapter 的常用样式普通模式样式 : android.r.layout.simple_list_item_1 单选模式样式 : android.r.layout.simple_list_item_single_cho ice 程序中还要对 ListView 对象设置单选模式, 即 ListView 对象.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 多选模式扩展阅读样式 : android.r.layout.simple_list_item_multiple_c hoice 程序设置 : ListView 对象.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE) ; 选中状态的获取, 可采用遍历方法, 每次遍历 ListView 对象.isItemChecked(position),position 从 0 开始到适配器的长度多选模式的程序操作扩展阅读 ListView 的数据更新当视图适配器对应的数组或列表数据发生变化时, 可通过适配器的 notifydatasetchanged() 方法, 使列表的视图更新 注意当适配器的列表或者数组重新指向对象 ( 采用 new 方法或者指向别的对象后 ), 调用适配器的 notifydatasetchanged() 方法会失效, 无法使得视图更新 SimpleAdapter 用于自定义布局行视图, 可图文并茂显示一行内容使用 simpleadapter 的数据一般都是用 HashMap 构成的列表, 列 37

38 任务 2 知识点 表的一个元素对应 ListView 的每一行 而 HashMap 对象中的 key 可映射到一行中自定义视图的资源上 程序举例 (S3_simpleAdapter) List<Map<String,Object>> mlist=new ArrayList<M ap<string,object>>();//<> 是泛型 for(int i=0;i<names.length;i++){ Map<String,Object> listitem=new HashMap<S tring, Object>(); //HashMap 是常用的 Map 类, 可通过 put 方法, 放置 key -value, 其中 key 是 String, 表示名称,value 可以是任何对象 listitem.put("testname", names[i]); listitem.put("picresource",picids[i] ); // 这个 listitem 有两个 HashMap 对象, 可以想象成数据库中具有两列的一条记录 mlist.add(listitem);//mlist 可想象成数据库中的一张表 SimpleAdapter msimpleadapter=new SimpleAdapte r(this,mlist,r.layout.adapterstyle1, new String[ ]{"testname","picresource", new int[]{r.id.textv iew01,r.id.imageview01); //simpleadapter 使用方法 : // arg0: context, 一般用 this // arg1: data list 对象, 即需要 adapter 的对象, 一般是 map 对象的 list // arg2: resource 样式布局文件 (xml) 的 resource Id, 即 R.layout.xxxx,xxxx 为 xml 文件名 // arg3: from: 即 list 里的 map 对象的 key 名称 ( 指需要适配的 key) 与 arg4 的 id 一一对应,from 为 String[] 对象 // arg4: to: 即样式布局被适配的对象的 resource Id,to 为 int[] 对象 lv.setadapter(msimpleadapter); SimpleCursorAdapter 列表点击事件 与数据库游标配合使用 38

39 任务 2 知识点 setonitemclicklistener() 设置 点击 listview 某一项的监听事件 setonitemlongclicklistener() 设置 长按 listview 某一项的监听事件扩展阅读 ListView 的视图生成机制及优化 ListView 编程步骤创建 Listview 组件设置 Adapter 调用 Listview 对象 setadapter() 方法实现列表点击事件程序举例 ( 完整例程 :S4_02_listView1) String[] names=new String[]{"p16","p17","p18","p19","P1 0","P11","P12","P9"; ListView lsv1=(listview)findviewbyid(r.id.listview01); ArrayAdapter<String > madapter=new ArrayAdapter<String> (this,android.r.layout.simple_list_item_1,names); lsv1.setadapter(madapter); // 注意 listview 对 OnItemSelectedListener 无效 lsv1.setonitemclicklistener(new OnItemClickListener() public void onitemclick(adapterview<?> arg0, View a rg1, int arg2, long arg3) { // arg0 是对应的 Adapter 视图 // arg1 为列表中被点击的那行视图, 可被强制转换为视图对应的组件类, 从而获取该组件内的内容 // arg2 为 position, 即在 listview 中第几条被点击的位置, 从 0 开始索引 // arg3 与数据库挂钩, 目前没有用到 // TODO Auto-generated method stub Toast.makeText(listViewAct.this, " 第 "+arg2+" 项被点击 ", Toast.LENGTH_SHORT).show(); ); 39

40 任务 2 知识点 5. ArrayAdapter 视图适配器通常用于将数组或 List 集合的视图适配构造函数 ArrayAdapter(Context context, int resource, T[] objects) context: 上下文, 通常是 Activity 类的 this resource: 适配器视图格式, 常用 Android 自带的格式, 例如 android.r.layout.simple_list_item_1 objects: 数组或 List 集合对象举例 String[] names=new String[]{"p16","p17","p18","p19","P10","P11","P12","P9"; ArrayAdapter<String > madapter=new ArrayAdapter<String>(t his,android.r.layout.simple_list_item_1,names);//<string> 为泛型,<> 内的类型必须和第三参数的类型一致 6. SimpleAdapter 面向用户自定义视图的适配器, 是扩展性非常好的适配器, 可将用户自定义的布局文件适配为一行的视图且无需对适配器进行改写构造函数 SimpleAdapter(Context context, List<? extends Map> data, int resource, String[] from, int[] to) arg0: context, 一般用 this arg1: data list 对象, 即需要 adapter 的对象, 一般是 map 对象的 list arg2: resource 样式布局文件 (xml) 的 resource Id, 即 R.layout.xxxx,xxxx 为 xml 文件名 arg3: from: 即 list 里的 map 对象的 key 名称 ( 指需要适配的 key) 与 arg4 的 id 一一对应,from 为 String[] 对象 arg4: to: 即样式布局被适配的对象的 resource Id,to 为 int[] 对象程序举例 ( 完整例程 :S3_simpleAdapter) 40

41 任务 2 知识点 List<Map<String,Object>> mlist=new ArrayList<Map<String,O bject>>();//<> 是泛型 for(int i=0;i<names.length;i++){ Map<String,Object> listitem=new HashMap<String, Objec t>(); //HashMap 是常用的 Map 类, 可通过 put 方法, 放置 key-value, 其中 k ey 是 String, 表示名称,value 可以是任何对象 listitem.put("testname", names[i]); listitem.put("picresource",picids[i] ); // 这个 listitem 有两个 HashMap 对象, 可以想象成数据库中具有两列的一条记录 mlist.add(listitem);//mlist 可想象成数据库中的一张表 SimpleAdapter msimpleadapter=new SimpleAdapter(this,mlist,R.layout.adapterstyle1, new String[]{"testname","picResour ce", new int[]{r.id.textview01,r.id.imageview01); 7. 视图适配器的改写 虽然 SimpleAdapter 已经可以提供比较灵活的视图适配, 可用户自定义 xml 布局作为一行的视图, 但是在某些场合下, 仍然需要更加灵活的视图, 则需对视图适配器的改写 常用的视图适配改写, 继承于 ArrayAdapter 或者 BaseAdapter, 相比之下, ArrayAdapter 需要改写的函数更少, 一般情况下只需改写 getview() 函数即可满足需求 getview() 函数在 ListView 一行视图更新或创建时会被自动调用 getview() 函数 : View getview (int position, View convertview, ViewGroup parent) position: 为当前视图行在 Adapter 视图中的位置, 从 0 开始索引 convertview: 为当前行视图, 当适配视图刚建立时, 该对象往往是 null 对象, 一般上 convertview 用 LayoutInflater 的 inflate 方法从布局文件的 xml 中生成布局视图 parent, 父类视图, 一般很少用到返回值 View 对象即为当前视图行的视图对象程序举例 ( 完整例程 :S5_02_AdapterOverRide) 41

42 任务 2 知识点 class myadapter extends ArrayAdapter{ public myadapter(context context, int textviewresour ceid, Object[] objects) { super(context, textviewresourceid, objects); // TODO Auto-generated constructor public View getview(int position, View convertview, V iewgroup parent) { // TODO Auto-generated method stub if(convertview==null){ convertview=layoutinflater.from(adapteroverri de.this).inflate(r.layout.adapterstyle1,null, false); // 通过 LayoutInflater.inflate 实现布局 xml 的动态 vie w 生成 // 第一个参数为样式的 xml 文件索引, 第二个参数为父视图, 可以是 null, 也可以是 parent // 第三个参数 false 改成 true, 会出错 ImageView iv=(imageview)convertview.findviewbyid( R.id.ImageView01); // 必须是 convertview.findviewbyid, 若是直接用 findview ById 会出错 TextView tv=(textview)convertview.findviewbyid(r. id.textview01); iv.setimageresource(picids[position]); tv.settext(names[position]); if(position%2==0){ tv.settextcolor(color.yellow);// 可以直接用 Colo r 类 else{ tv.settextcolor(0xffffffff);// 也可以直接赋值 #AAR RGGBB 十六进制数 return convertview; 42

43 任务 2 知识点 8. 网格视图 GridView 多行多列网状形式显示的列表, 一般用于显示图片, 图片等内容, 比如实现九宫格图 GridView 常用 XML 属性 android:numcolumns 列数设置 android:numcolumns="auto_fit" : 列数设置为自动 android:numcolumns="3": 列数为 3 列 android:columnwidth 每列的宽度 android:columnwidth="90dp": 每列的宽度为 90dp, 也就是 Item 的宽度 android:stretchmode 剩余空间如何填充 android:stretchmode="columnwidth" 剩余空间采用列扩展来填充, 即增大 columnwidth android:stretchmode="spacingwidth" 剩余空间采用列间的空隙来填充, 即增大 horizontalspacing android:verticalspacing="10dp" 垂直边距为 10dp android:horizontalspacing="10dp" 水平边距为 10dp 适配器 : 一般采用 SimpleAdapter 进行适配, 放置顺序为从左至右, 再从上至下常用侦听接口 :onitemclicklistener 9. 扩展阅读 打造万能的 ListView GridView 适配器 43

44 任务 2 知识点 44

45 任务 3:UI 菜单编程 任务 3:UI 菜单编程 任务 3- 具体任务 任务 3 知识点 45

46 任务 3- 具体任务 任务 3- 具体任务 编写一个程序,1 个 TextView 1 个 ListView,1 个 ImageView,ListView 是风景点的地点名称,TextView 显示菜单或 ListView 选中元素的风景名称,ImageView 则显示选中元素的风景照片 在所描述功能的基础上, 增加上下文菜单 ( 修改 删除两个功能 ), 修改功能支持对风景地点改名称, 并且改完名称后,ListView 的名称也会被修改 ; 删除功能则对该风景删除,ListView 也会相应更新 选项菜单的功能则为 : 增加风景 重置两个功能, 增加风景可新增风景点 ( 只需要风景名称, 图片则用任易一张图片替代即可 ); 重置功能则将 ListView 中的风景列表恢复成程序启动时的状态 任务效果 : 初始状态 46

47 任务 3- 具体任务 任务效果 : 长按列表中的温州大学, 弹出上下文菜单 任务效果 : 点击修改, 则进入修改对话框 47

48 任务 3- 具体任务 任务效果 : 点击选项菜单, 则弹出对应菜单, 并实现相应功能 48

49 任务 3- 具体任务 49

50 任务 3 知识点 任务 3 知识点 著者 : 温州大学 - 童长飞 选项菜单编程 1. 对话框 AlertDialog 弹出对话框扩展阅读使用方法 AlertDialog 不使用构造函数创建对象, 而是采用 Builder, 例如 AlertDialog.Builder builder=new AlertDialog.Builder(this) 通过 Builder 创建对象后, 可通过设置标题 视图 按钮及响应事件后, 需调用.show() 方法才能将对话框显示出来 settitle() 设置标题, 参数可以是 String 对象 setmessage() 设置标题下的消息文本, 可不使用设置按钮最多可设置 3 个按钮, 分别为确定 取消及中间按钮确定按钮 :setpositivebutton (CharSequence text, DialogInterface.OnClickListener listener) 第 1 个参数为确定按钮上显示的文本第 2 个参数为按钮响应事件, 可通过匿名方法实现接口对应的响应函数, 也可以是 null, 表示不对按钮响应进行处理取消按钮 :setnegativebutton (CharSequence text, DialogInterface.OnClickListener listener) 具体参数解释同确定按钮中间按钮 :setneutralbutton (CharSequence text, DialogInterface.OnClickListener listener) 具体参数解释同确定按钮 setview() 50

51 任务 3 知识点 设置自定义视图, 可将布局文件通过 inflate() 方法生成视图, 并作为参数设置到对话框里假设有个 xml 布局文件 (R.layout.dialog1), 根节点是线性布局, 要把该布局文件设置到对话框中, 可通过以下程序实现 LinearLayout diagloglayout = (LinearLayout)LayoutInf later.from(dialogact.this).inflate(r.layout.dialog1, null, false);//la youtinflater.from(context context) 是静态方法, 生成 Layou tinflater 对象, 用于生成布局对象 builder.setview(diagloglayout);// 通过 setview 方法将 in flate 出来的 xml 视图赋给 dialog 用布局文件生成的视图, 若要对视图内的控件进行访问, 不能直接用 Acitivy 的 findviewbyid 方法, 而是必须用布局对象的 findviewbyid 方法例如, 假设 R.layout.dialog1 布局中有两个 EditText, 则用如下程序实现 et1 = (EditText) diagloglayout.findviewbyid(r.id. EditText01);// 注意一定要在 diagloglayout 视图中找相应的 EditText, 否则找不到会出错 et2 = (EditText) diagloglayout.findviewbyid(r.id. EditText02); 其它视图的使用方法 AlertDialog.Builder setmultichoiceitems (CharSequence[] items, boolean[] checkeditems, DialogInterface.OnMultiChoiceClickListener listener) 可设置多选列表 AlertDialog.Builder setadapter (ListAdapter adapter, DialogInterface.OnClickListener listener) 可设置普通的列表程序举例 (S6_03_dialog) final AlertDialog.Builder builder = new AlertDialog.Buil 51

52 任务 3 知识点 der(this);// 采用弹出对话框构造器 Builder 来构造 // 注意 AlertDialog 不采用常规的构造方法, 而是采用 Builder 方法, 因为该类的构造函数是私有的 // 注意 oncreate 函数中的变量不用 final 修饰的话, 在类中的其他函数里是不能访问的, 例如 bt1.onclick() 函数无法访问未被 final 修饰的局部变量 builde r // 另外一种方法是将 builder 作为 dialogact 的类成员 final EditText et1, et2;// 同样道理, 若不 final 修饰, 在 builde r.setpositivebutton 中不能访问 builder.settitle(" 编辑对话框 "); LayoutInflater layoutinflater = LayoutInflater.from(dialogAct.this); LinearLayout diagloglayout = (LinearLayout) layoutinflat er.inflate(r.layout.dialog1, null, false); // dialoglayout 也可以 // 采用 getlayoutinflater() 的 inflate 方法来产生 xml 布局视图, 作为弹出对话框的设置视图 builder.setview(diagloglayout);// 通过 setview 方法将 inflate 出来的 xml 视图赋给 dialog et1 = (EditText) diagloglayout.findviewbyid(r.id.edittex t01);// 注意一定要在 diagloglayout 视图中找相应的 EditText, 否则找不到会出错 et2 = (EditText) diagloglayout.findviewbyid(r.id.edittex t02); et1.settext(province.gettext().tostring()); et2.settext(city.gettext().tostring()); builder.setpositivebutton(" 确定 ", new DialogInterface.OnClickListener() {// 当直接用 OnClickListener() 有问题时, 使用 DialogInterface.OnClickListener() 进行限制 public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub province.settext(et1.gettext().tostring( 52

53 任务 3 知识点 city.settext(et2.gettext().tostring()); );// PositiveButton 为对话框左键 builder.setnegativebutton(" 取消 ", new DialogInterface.OnClickListener() public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub );// NegativeButton 为对话框右键 builder.create().show();// 对话框设置完毕后, 要调用 create() 进行创建和 show() 进行显示 2. 选项菜单 -OptionsMenu 在早期的 Android 手机, 例如 Android2.2 等, 在手机上设计了专门的菜单按钮键, 点击菜单键即可调出菜单, 在高版本的 Android 中, 已经取消了菜单按钮的硬件开关, 一般上菜单在 Action Bar 上以... 的形式出现选项菜单不需要注册视图, 可通过 oncreateoptionsmenu 或 onprepareoptionsmenu 生成 oncreateoptionsmenu 应用程序在生命周期内第一次被用户触发选项菜单时生成 onprepareoptionsmenu 应用程序在每次被用户触发选项菜单时生成, 适合选项菜单有动态更新的场合使用 oncreateoptionsmenu 或 onprepareoptionsmenu 所传递的参数 Menu menu 为选项菜单对象, 可通过 Menu 布局文件映射或程序动态生成 Menu 布局文件映射生成 MenuInflater 对象的 inflate 方法生成 53

54 任务 3 知识点 例如 : ``` MenuInflater menuinflater=new MenuInflater(this); menuinflater.inflate(r.menu.optionmenu, menu); //R.menu.optionmenu 为 menu 的布局文件 Menu 布局文件示例在 Menu 布局文件的 Item 中加入 Menu 标签可以构成子菜单 54

55 任务 3 知识点 com/apk/res/android" > <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android=" "> "> "> <item android:id="@+id/opt_item01" android:title=" 选项二级菜单 1" android:titlecondensed=" 子菜单 1"> <menu> <item android:id="@+id/opt_item02" android:title=" 选项菜单 2" android:titlecondensed=" 选菜 2 </item> <item android:id="@+id/opt_item03" android:title=" 选项菜单 3" android:titlecondensed=" 选菜 3 </item> <item android:id="@+id/opt_item04" android:title=" 选项菜单 4" android:titlecondensed=" 选菜 4 </item> </menu> </item> <item android:id="@+id/opt_item05" android:title=" 选项菜单 5" android:titlecondensed=" 选菜 5"> </item> </menu> 程序动态生成 55

56 任务 3 知识点 可用 Menu 对象的 add 方法加标题, 加图片, 加顺序等操作 例如 : menu.clear();// 先把 menu 清掉, 再增加相应项 for(int i=0;i<mlists.size();i++){ //menu 有很多种不同传递传递参数的方法, 可课外自主学习 menu.add(menu.none,i, i, mlists.get(i)) ;// 参数 0:groupId, 参数 1:itemId, 参数 2: 顺序, 参数 3: 显示的文本 选项菜单的事件响应选项菜单当用户点击某个菜单选项, 会触发 onoptionsitemselected(menuitem item) 事件, 在该事件中, 可通过传入参数 item 判断是哪个选项菜单被用户点击, 并在函数中处理对应的菜单事务根据 MenuItem item 判断菜单选项的方法 item.getitemid(), 根据 Id 号判断 ( 推荐使用, 尤其是通过 xml 菜单布局生成菜单时 ) item.getorder(), 根据顺序号, 用该方法时, 最好在菜单生成时给 MenuItem 赋 order 值 item.gettitle(), 根据菜单的标题 ( 不推荐使用, 一旦标题内容后期发生改变, 在逻辑程序区还要做相应修改 ) 程序举例 (s6_01_optionsmenu) 56

57 任务 3 public boolean onprepareoptionsmenu(menu menu) { // 对动态选项菜单的生成和更新要用 onprepareoptionsmenu // TODO Auto-generated method stub menu.clear();// 先把 menu 清掉, 再增加相应项 int i = 0; for (String tempstr : mlists) { menu.add(menu.none, i, i, tempstr); i++; return super.onprepareoptionsmenu(menu); public boolean onoptionsitemselected(menuitem item) { // TODO Auto-generated method stub int position = item.getitemid();// 也可以用 item.geto Toast.makeText(this, mlists.get(position), Toast.LEN GTH_LONG).show();// 显示弹出式提示框, 过一段时间会自动消失 // item.getitemid() 取得的是创建 menu 时的 itemid 参数 return super.onoptionsitemselected(item); 3. 上下文菜单 -ContextMenu 上下文菜单在长按视图时被触发, 并在每次触发时重新生成上下文菜单视图 上下文菜单必须对视图进行注册 ( 通过 registerforcontextmenu 函数 ), 才能在长按时触发 oncreatecontextmenu, 生成上下文菜单 上下文菜单生成在 oncreatecontextmenu 函数中实现, 该函数传递参数为 oncreatecontextmenu(contextmenu menu, View v,contextmenuinfo menuinfo) ContextMenu menu 是菜单对象, 其生成菜单视图的方法与选项菜单类似, 既可通过 MenuInflater 对象的 inflate 方法生成, 也可以通过程序动态生成 57

58 任务 3 知识点 View v 是被长按的视图对象 ContextMenuInfo menuinfo 是上下文菜单信息, 可通过 ((AdapterView.AdapterContextMenuInfo)menuInfo).position 获取上下文菜单触发视图在适配器视图 ( 例如 ListView 等 ) 上的位置, 从 0 开始索引, 之所以要将 menuinfo 强制转换成 AdapterView.AdapterContextMenuInfo 类型是因为上下文菜单不一定是通过适配器视图触发的 ( 也可以是通过普通的 TextView ImageView 等视图触发 ), 在通过非适配器视图触发时, 上下文菜单不存在被第 xx 个视图触发的意义, 也就没有对应的 position 位置信息 程序举例 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); tv1 = (TextView) findviewbyid(r.id.textview01); tv2 = (TextView) findviewbyid(r.id.textview02); lv1 = (ListView) findviewbyid(r.id.listview01); lv1.setadapter(new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1, names)); registerforcontextmenu(lv1);// 上下文菜单一定要注册到某个视图上 ( 通过长按该视图触发 ), 选项菜单不用注册 // 本例中, 上下文菜单注册到 listview 上 // 上下文菜单和选项菜单, 分别要改写对应的 oncreatexxxxmenu 和 onxxxx public boolean oncontextitemselected(menuitem item) { // TODO Auto-generated method stub String triggedlistitem = names[contextposition];// 通过在 ncreatecontextmenu 中获取的 contextposition 可知道 listview 中被长按出上下文菜单的位置 switch (item.getitemid()) { case R.id.context_item01:// context_item01 是 menu 文件夹下 c ontextmenu.xml 中一个菜单项 58

59 任务 3 知识点 tv2.settext(" 上下文菜单 1 触发来自 :" + triggedlistitem); break; case R.id.context_item02: tv2.settext(" 上下文菜单 2 触发来自 :" + triggedlistitem); break; case R.id.context_item03: tv2.settext(" 上下文菜单 3 触发来自 :" + triggedlistitem); break; case R.id.context_item04: tv2.settext(" 上下文菜单 4 触发来自 :" + triggedlistitem); break; default: break; return public void oncreatecontextmenu(contextmenu menu, View v, ContextMenuInfo menuinfo) { // menu 是待生产的菜单,v 是产生上下文菜单的视图 MenuInflater menuinflater = new MenuInflater(this);// x ml 中的 menu 布局采用 MenuInflater 进行扩展 ; menuinflater.inflate(r.menu.contextmenu, menu);// R.men u.contextmenu 对应于 menu 文件夹下的 contextmenu.xml contextposition = ((AdapterView.AdapterContextMenuInfo) menuinfo).position;// 通过 debug 断点调试进入后观察可看出是该类别 // 获取的 position 就是适配器视图中触发上下文菜单的视图位置, 从 0 开始索引 // TODO Auto-generated method stub super.oncreatecontextmenu(menu, v, menuinfo); 59

60 任务 4:Http 编程 任务 4:Http 编程 任务 4- 具体任务 任务 4 知识点 60

61 任务 4- 具体任务 任务 4- 具体任务 编写一个程序, 可以解析温大教务处 的新闻标题, 并在 ListView 上显示出来, 在 ListView 中点击新闻标题可调用系统浏览器跳转至对应新闻上 ; 程序通过 Thread 线程进行网页浏览和内容解析 ; 线程通过 Handler 消息发送解析结果给主 UI 程序进行内容更新显示 扩展功能 : 实现下拉加载下一页新闻功能, 即在 ListView 底部时通过下拉, 能动态加载下一页的新闻到当前列表 61

62 任务 4 知识点 任务 4 知识点 著者 : 温州大学 - 童长飞 Http 编程 1. Jsoup 解析 Jsoup 可用于 Html xml 等内容的解析并提取数据官方链接中文翻译链接 Jsoup 的使用方法 1. 导入 Jsoup 库 ( 以 版为例 ) 将 jsoup jar 复制到工程项目的 libs 文件夹 ( 若无该文件夹, 可新建 ) 2. 在 AndroidManifest.xml 中增加上网权限, 增加如下内容 : <uses-permission android:name="android.permission.interne T"/> 3. Jsoup 与 Eclipse 下的 Android 运行出错的解决方法 : 若错误类型是 android.os.strictmode$androidblockguardpolicy.onnetwork, 表示在主 UI 线程遇到比较费时的阻塞操作, 其解决方法有 : i. 在新的 Thread 中运行耗时操作, 例如网络连接, 数据库建立及查询等 ii. 在 AndroidManifest.xml 中删除标签属性, 使得项目不依赖于 sdk 版本, 但是对于真正的工程项目, 不建议这样操作 ( 若这样做, 对很多 Android 提供的高版本特性, 均需要进行处理 ) 4. 获得网页文档方法 62

63 任务 4 知识点 Document doc = Jsoup.connect(url).timeout(timeout).get() ; // 其中,url 为 String 类型的 url 地址,timeout 为 int 型的超时参数,m s 为单位 // 得到 Document 对象后, 即可利用 Document 方法提取内容 5. Document 对象解析数据 public Elements getelementsbyattributevalue(string key,string value) 返回的 Elements 对象是文档解析中符合属性 key=value 的标签内容, 可对 Elements 对象进一步遍历解析获取内容 6. Elements 对象遍历数据 Element first(): 取得第 0 个元素 Element get(int index): 取得第 index 个元素 Elements select(string query): 返回匹配 query 标签的元素并封装成 Elements 返回 ( 各元素是去除了 query 标签的内容 ) 7. Element 对象使用 String text(): 获得非标签的内容 String html(): 获得含 html 标签的内容 String attr(string attributekey): 获得属性为 attributekey 的内容使用举例例如 : <a href='showarticle.aspx?id=7568' title='test' target='_blank'> 我院学生荣获编程大奖 </a> 采用 text() 返回值为 : 我院学生荣获编程大奖采用 attr("href") 返回值为 : showarticle.aspx?id=7568 采用 attr("title") 返回值为 :test 例程 ( S7_01_simpleJoupTest ) Button bt1; TextView tv1; EditText et1; ArrayList<String> newsurls, newstimes, newstitles; final int URL_TIME_OUT = 30000;// 自定义链接超时常量 String url, url2; Handler handler; 63

64 任务 4 知识点 // 本应用程序需要网络权限, 否则不能运行, 因此在 AndroidManifest.xm l 中加了 // <uses-permission // android:name="android.permission.internet"></uses-perm ission> // 另外本应用程序用了第三方插件 Jsoup, 需将 Jsoup 对应的 jar 文件放在 l ibs public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); et1 = (EditText) findviewbyid(r.id.edittext01); tv1 = (TextView) findviewbyid(r.id.textview02); bt1 = (Button) findviewbyid(r.id.button01); id=117"); et1.settext(" url2 = " handler = new Handler(new Handler.Callback() public boolean handlemessage(message msg) { // TODO Auto-generated method stub updateresulttask(); return false; bt1.setonclicklistener(new OnClickListener() public void onclick(view v) { // TODO Auto-generated method stub new Thread(new Runnable() 64

65 任务 4 知识点 public void run() { // TODO Auto-generated method stub dourlparsing();// 在主 UI 线程中运行, 会使得界面在这两个函数运行期间不能进行 UI 操作, 使得手机像死机了一样 handler.sendemptymessage(0); ).start(); ); public void dourlparsing() { url = " "; newsurls = new ArrayList<String>();// 用于存储标题的 url newstimes = new ArrayList<String>();// 用于存储标题的时间 newstitles = new ArrayList<String>();// 用于存储标题的内容 try { Document document = Jsoup.connect(url).timeout(UR L_TIME_OUT).get(); Elements newslists = document.getelementsbyattrib utevalue("id", "newslists");// 获取 <div id="newslists"> 内容 </div> 中对应的信息 Element newslist = newslists.first(); Log.d("test", " newslist.html() "); Log.d("test", newslist.html()); Log.d("test", " newslist.text() "); Log.d("test", newslist.text()); Elements li_lists = newslist.select("li"); for (int i = 0; i < li_lists.size(); i = i + 2) { Element element0 = li_lists.get(i); Element element1 = li_lists.get(i + 1); 65

66 任务 4 知识点 Element ele = element0; String str0 = ele.data(); String str1 = ele.html(); String str2 = ele.text(); String str3 = ele.owntext(); Log.d("test", " html() "); Log.d("test", ele.html()); Log.d("test", " text() "); Log.d("test", ele.text()); ().text();// 提取发布时间 String str_time = element1.select("li").first.attr("href"); (); String item_url = url2 + element0.select("a") newsurls.add(item_url); String item_title = element0.select("a").text newstimes.add(str_time); newstitles.add(item_title); catch (IOException e) { // TODO Auto-generated catch block e.printstacktrace(); public void updateresulttask() { StringBuffer sb = new StringBuffer(); int goodslength = newsurls.size(); for (int i = 0; i < goodslength; i++) { String head = new String().format(" Item %0 2d/%d \n", i + 1, goodslength); sb.append(head); 66

67 任务 4 知识点 String body = new String().format( "URL=\n%s\n\nDate=\n%s\n\nMessage=\n%s\n", newsurls.get(i), newstimes.get(i), newstitles.get(i)); sb.append(body); sb.append(" \n\n"); tv1.settext(sb); 2. 句柄 Handler 与线程 Thread Android 中对界面的更新不适合在 Thread 中完成 ( 在非主 UI 线程中对界面更新会直接报错终止程序 ), 涉及界面更新的操作必须在主 UI 线程中完成, 一种常用的解决方案是在 Thread 中完成耗时工作, 并通过 Handler 的消息通知主 UI 的 Handler 进行更新操作 Handler 句柄的使用 Handler 句柄通过消息实现不同线程之间的异步操作, 当线程发出该句柄的消息 Message 时 ( 在线程中通过句柄对象的 sendmessage 方法发送消息 ),Handler 对象会自动调用 handlemessage 方法, 因此用户编程可在 handlemessage 方法中对 Message 对象取值, 并进行相应操作 Message 对象的 what 是 int 型数据, 一般用于消息的类型, 用户可自由使用 Message 对象的 arg1 和 arg2 是 int 型数据, 用户可自由使用 Message 对象的 getdata() 返回 Bundle 对象, 因此用户可在 Bundle 对象中放置复杂的数据, 实现线程与句柄之间各种类型数据的传递 Handler 的对象实例一般采用 Handler 带 Handler.Callback 接口的构造函数, 而 Callback 接口需对 handlemessage(message msg) 方法实现 Thread 的使用方法 1- 继承 Thread, 并改写 run 方法 (run 方法在 Thread 中是个空函数, 所以必须被改写, 进而通过 Thread 的 start 方法启动线程后, 会自动运行 run 方法, 并在 run 函数执行结束后,Thread 消亡 ) 方法 2- 给 Thread 构造函数在构造时传递一个已实现 run 方法的 Runnable 接口对象 ( 可匿名实现 ),Runnable 接口的实现时必须实现 run 方法 67

68 任务 4 知识点 Thread 启动 Thread 对象调用 start 方法, 即可启动线程, 启动线程后会自动调用 run 方法, 当 run 方法执行结束,Thread 消亡例程 ( S8_03_handler_thread_test ) ProgressBar bar; AtomicInteger progressvalue = new AtomicInteger();// 多个线程访问同一变量建议使用原子操作或原子变量 AtomicBoolean isthreadrunning = new AtomicBoolean(); Button bt1, public void oncreate(bundle icicle) { super.oncreate(icicle); setcontentview(r.layout.main); bar = (ProgressBar) findviewbyid(r.id.progress); bt1 = (Button) findviewbyid(r.id.button01); bt2 = (Button) findviewbyid(r.id.button02); final Handler handler = new Handler() {// Handler 为句柄, 与主 UI 同一线程, 通常用来更新主 UI, 是其他线程与主 UI public void handlemessage(message msg) {// handle Message 是 Handler 与其他线程进行通讯的一种常用方式 bar.setprogress(msg.what);// msg.what 在本例程中用于存放进度值 if (msg.what == 100) { bt2.setenabled(false); ;// Handler 在主 UI 线程中执行, 程序中涉及对 UI 更新的操作建议在主 UI 线程中进行操作 Thread background = new Thread(new Runnable() {// Thr ead 为线程, 与主 UI 不是同一个线程 // 若程序中遇到比较费时的操作, 建议放在线程中进行, 需要更新 UI 时, 通过给 Handler 发消息, 通知 Handler 更新 UI // 若在主 UI 中进行费时操作, 界面会被阻塞, 造成手机卡死的现象 68

69 任务 4 知识点,Runnable 需要改写 run 方法 public void run() {// Thread 参数为 Runnable try { while (true) { Thread.sleep(500);// 线程在循环中每睡眠 0.5 秒, 发一次 handler 消息 if (!isthreadrunning.get()) { continue; Message message = handler.obt ainmessage();// 从 handler 中获取 Message,Message 是线程与 Handler 交互的消息 get() + 5; t); ); message.what = progressvalue. progressvalue.set(message.wha if (message.what > 100) { progressvalue.set(100); isthreadrunning.set(false Log.d("message.what", "" + me ssage.what); handler.sendmessage(message); // 发送 message 给 handler catch (Throwable t) { // just end the background thread ); isthreadrunning.set(false);// 用于跟踪线程进度条更新状态, false 禁止更新,true 每次进度条自增 5 background.start();// 启动线程 bt1.setonclicklistener(new OnClickListener() 69

70 任务 4 知识点 值 public void onclick(view v) { // TODO Auto-generated method stub progressvalue.set(0);// 原子变量, 用于存进度条进度 bar.setprogress(0);// 使进度条进度为 0 isthreadrunning.set(true);// 使进度条能更新 bt2.settext(" 暂停 "); bt2.setenabled(true); ); bt2.setonclicklistener(new OnClickListener() public void onclick(view v) { // TODO Auto-generated method stub boolean isrunning = isthreadrunning.get(); if (isthreadrunning.get()) {// 若线程运行, 则设置该原子变量为 false, 使之停止 // background.stop(); //stop() 方法不建议使用, 若线程已经在 sleep 状态,stop 不掉 ; bt2.settext(" 继续 "); isthreadrunning.set(false); else { bt2.settext(" 暂停 "); // background.start();// 若线程已经运行一遍后, 用 start 方法会出错 isthreadrunning.set(true); ); 3. Bundle 数据绑定传输 当线程 (Thread) 与句柄 (Handler) 之间传输数据 Activity 之间或 Activity 与 Service Service 与 BroadCastReceiver 之间传输数据时, 最常用的是用 70

71 任务 4 知识点 Bundle 来绑定并传输数据 Bundle 的使用与 Map 类似, 通过存放数据键 (key) 获取对应的各种类型的值 (value), 而且必须通过键 (key) 获取 Bundle 使用举例 应值 est1"; Bundle bundle=new Bundle();//Activity 靠 Bundle 来传输数据 bundle.putstring("editstring","test1"); // 参数 0 是 key, 参数 1 是 value, 被启动程序要通过相同的 key 来获取对 //String str=bundle.getstring("editstring");// 则 str="t Bundle 一般是通过 Intent 或 Message 对象进行传输数据的 Intent 对象 (Activity 间传输数据 ) 可通过 putextras() 方法放入 Bundle 对象在被调用的 Activity 中则可通过 getintent().getextras() 重新获得 Bundle 对象, 进而可通过 Bundle 对象的 getxxx(string Key) 方法, 获得键为 Key 的对应值 Message 对象 ( 句柄与线程间传输数据 ) 可通过 setdata(bundle data) 设置 Bundle 对象在句柄 Handler 中可通过 Message 对象的 getdata() 方法取得 Bundle 对象, 进而通过 getxxx 方法取得相应数据当需要通过 Bundle 传递复杂的类数据时, 则需要对该类实现序列化 (implements Serializable), 再通过 putserializable (String key, Serializable value) 将类对象放入 Bundle 对象, 取出类对象时, 则用 Bundle 对象的 getserializable (String key) 方法取出, 并强制转换成对应的类对象 4. 活动 Activity 与意图 Intent Android 的活动 (Activity) 可以理解成网站上的一个网页, 当从一个网页跳到另一个网页时, 则涉及到页面的跳转和数据传输 Android 活动之间的调用可通过意图 Intent 实现 Android 内置了许多系统活动, 只要传输正确的数据及动作并在 AndroidManifest.xml 中配置相应权限, 即可通过系统调用相应活动调用浏览器访问网页 ( 完整例子 s9_simpleintent ) 71

72 任务 4 知识点 代码 Uri uri; Intent i; uri=uri.parse(" 调用系统浏览器打开网页 i=new Intent(Intent.ACTION_VIEW,uri); startactivity(i); 权限配置 (androidmanifest.xml 中配置 ) ET" > <uses-permission android:name="android.permission.intern </uses-permission> 打开拨号界面 ( 并非直接打电话 ) 代码 电话 Uri uri; Intent i; uri = Uri.parse("tel:5556"); // 打开拨号界面, 并非直接打 i=new Intent(Intent.ACTION_DIAL, uri); startactivity(i); 权限配置 (androidmanifest.xml 中配置 ) HONE" > </uses-permission> <uses-permission android:name="android.permission.call_p </uses-permission> 直接拨打电话 代码 72

73 任务 4 知识点 Uri uri; Intent i; uri = Uri.parse("tel:5556"); // 直接拨打电话 i=new Intent(Intent.ACTION_CALL, uri); startactivity(i); 权限配置 (androidmanifest.xml 中配置 ) HONE" > </uses-permission> <uses-permission android:name="android.permission.call_p </uses-permission> 启动短信 代码 Uri uri; Intent i; uri=uri.parse("smsto:5556");// 发送短信 i = new Intent(Intent.ACTION_SENDTO, uri); i.putextra("sms_body"," 短信的内容 "); // 前面的 key 找不到系统的对应常量 startactivity(i); 权限配置 (androidmanifest.xml 中配置 ) MS" > <uses-permission android:name="android.permission.send_s </uses-permission> 启动摄像头拍照 代码 73

74 任务 4 知识点 Uri uri; Intent i; i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startactivity(i); 权限配置 (androidmanifest.xml 中配置 ) " > <uses-permission android:name="android.permission.camera </uses-permission> 5. ListView 的下拉刷新实现 下拉刷新, 可以对 ListView 增加 setonscrolllistener 侦听接口, 并在接口的实现函数 onscrollstatechanged 方法中通过判断列表视图位置来决定是否需要更新 OnScrollListener 接口的 onscrollstatechanged(abslistview view, int scrollstate) 函数的使用当下拉释放掉时, scrollstate == OnScrollListener.SCROLL_STATE_IDLE, 应在下拉释放掉后再加载数据下拉并不意味着一定要加载, 当下拉后视图处于已有数据的底部时才加载, 因此需要一个变量来跟踪视图是否在底部跟踪当前列表可见视图最后一个位置可在 OnScrollListener 接口的 onscroll 方法中进行处理 onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) 函数参数说明 firstvisibleitem: 第一个可见视图在列表中的位置索引, 从 0 开始 visibleitemcount: 当前屏幕中列表可见数目, 当一屏有 7 个列表行, 则该值为 7 totalitemcount: 列表适配器中的元素数目, 即列表的元素总数目 74

75 任务 4 知识点 当前屏中, 最后一个可见元素的位置可通过 lastvisibleindex = firstvisibleitem + visibleitemcount - 1 来确定, 其中 lastvisibleindex 是最后可见元素位置适配器可调用 getcount() 方法取得元素总数目综上, 在 onscrollstatechanged 中, 当 scrollstate == OnScrollListener.SCROLL_STATE_IDLE && lastvisibleindex == msimpleadapter.getcount() 条件成立时, 即可进行下拉刷新 ListView 对象可通过 addfooterview(view v) 方法, 给列表底部增加视图 v( 可通过 LayoutInflater 对象的 inflate 方法从 xml 中生成视图 ); 当列表已加载完全部数据后, 可通过 removefooterview (View v) 方法, 将底部视图移除注意 : 建议 FooterView 在列表设置适配器之前加上, 不然底部视图会加不上去 当适配器的对应数据发生更新后, 可通过适配器 notifydatasetchanged() 方法, 通知列表对象更新视图例程 ( S17_ListView_loadMore_at_foot ) public class MainActivity extends Activity implements OnS crolllistener { // ListView 的 Adapter private SimpleAdapter msimpleadapter; private ListView lv; private Button bt; private ProgressBar pg; private ArrayList<HashMap<String, String>> list; // ListView 底部 View private View moreview; private Handler handler; // 设置一个最大的数据条数, 超过即不再加载 private int MaxDateNum; // 最后可见条目的索引 private int lastvisibleindex; /** Called when the activity is first created. */ 75

76 任务 4 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); MaxDateNum = 22; // 设置最大数据条数 lv = (ListView) findviewbyid(r.id.listview1); oredata, null); // 实例化底部布局 moreview = getlayoutinflater().inflate(r.layout.m ; ; bt = (Button) moreview.findviewbyid(r.id.bt_load) pg = (ProgressBar) moreview.findviewbyid(r.id.pg) handler = new Handler(); // 用 map 来装载数据, 初始化 10 条数据 list = new ArrayList<HashMap<String, String>>(); for (int i = 0; i < 10; i++) { HashMap<String, String> map = new HashMap<Str ing, String>(); map.put("itemtitle", " 第 " + i + " 行标题 "); map.put("itemtext", " 第 " + i + " 行内容 "); list.add(map); // 实例化 SimpleAdapter msimpleadapter = new SimpleAdapter(this, list, R. layout.item, new String[] { "ItemTitle", "ItemText", new int[] { R.id.tv_title, R.id.tv_content ) ; // 加上底部 View, 注意要放在 setadapter 方法前 lv.addfooterview(moreview); lv.setadapter(msimpleadapter); // 绑定监听器 lv.setonscrolllistener(this); 76

77 任务 4 知识点 bt.setonclicklistener(new OnClickListener() public void onclick(view v) { loaddata(v); ); void loaddata(view v) { pg.setvisibility(view.visible);// 将进度条可见 bt.setvisibility(view.gone);// 按钮不可见 handler.postdelayed(new Runnable() { // 注意 postdelayed 里的 Runnable() 不是新的线程, 与 handler 在同一个线程, 若 handler 在主线程里, 则 Runnable() 也在主线程 ; // 若 postdelayed 里是一个 Thread, 则可通过 postdelayed public void run() { loadmoredate();// 加载更多数据 bt.setvisibility(view.visible); pg.setvisibility(view.gone); msimpleadapter.notifydatasetchanged();// 通知 listview 刷新数据, 2000); private void loadmoredate() { int count = msimpleadapter.getcount(); if (count + 5 < MaxDateNum) { // 每次加载 5 条 for (int i = count; i < count + 5; i++) { HashMap<String, String> map = new HashMap 77

78 任务 4 知识点 <String, String>(); map.put("itemtitle", " 新增第 " + i + " 行标题 "); map.put("itemtext", " 新增第 " + i + " 行内容 " ); list.add(map); else { // 数据已经不足 5 条 for (int i = count; i < MaxDateNum; i++) { HashMap<String, String> map = new HashMap <String, String>(); map.put("itemtitle", " 新增第 " + i + " 行标题 "); map.put("itemtext", " 新增第 " + i + " 行内容 " ); public void onscroll(abslistview view, int firstvisib leitem, int visibleitemcount, int totalitemcount) { // view The view whose scroll state is being repo rted // firstvisibleitem the index of the first visibl e cell (ignore if // visibleitemcount == 0) // visibleitemcount the number of visible cells // totalitemcount the number of items in the list adaptor Count - 1; lastvisibleindex = firstvisibleitem + visibleitem System.out.println("firstVisibleItem:" + firstvis 78

79 任务 4 知识点 ibleitem); temcount); bleindex); ount); System.out.println("visibleItemCount:" + visiblei System.out.println("lastVisibleIndex:" + lastvisi System.out.println("totalItemCount:" + totalitemc // 所有的条目已经和最大条数相等, 则移除底部的 View if (totalitemcount == MaxDateNum + 1) { lv.removefooterview(moreview); Toast.makeText(this, " 数据全部加载完成, 没有更多数据!", public void onscrollstatechanged(abslistview view, in t scrollstate) { // 滑到底部后自动加载, 判断 listview 已经停止滚动并且最后可视的条目等于 adapter 的条目 if (scrollstate == OnScrollListener.SCROLL_STATE_ IDLE && lastvisibleindex == msimpleadapter.get Count()) { loaddata(view); 扩展阅读 ListView 下拉刷新, 上拉自动加载更多 79

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 : EditText 实现城市搜索 1801210778 邹宇航 摘要 : 使用 EditText 实现搜索城市的功能, 以此为依据更新 ListView 1. 效果图 : 2. 主要步骤 (1) 在 select-city.xml 布局文件中中添加 EditText 控件用作搜索框, 然后添加 ListView 控件用来显示城市名字内容 代码如下 : 预览图 : (2) 在 SelectCity.java

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

Android Fragment

Android Fragment Android Fragment 建國科技大學資管系饒瑞佶 2017/10 V1 Android 3.0 後才支援 Fragment 解決部分 App 適應螢幕大小的問題 它類似於 Activity, 可以像 Activity 可以擁有自己的版面設計, 也和 Activity 一樣有自己的生命週期 ( 具備 oncreate() oncreateview() 與 onpause() 方法 ) LifeCycle

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

Android 编程基础 Android 开发教程 & 笔记 1

Android 编程基础 Android 开发教程 & 笔记 1 Android 开发教程 & 笔记 1 多式样 ProgressBar 撰写 : 地狱怒兽 联系 :zyf19870302@126.com 普通圆形 ProgressBar 该类型进度条也就是一个表示运转的过程, 例如发送短信, 连接网络等等, 表示一个过程正 在执行中 一般只要在 XML 布局中定义就可以了

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

第一章 Android 简介与开发环境搭建

第一章 Android 简介与开发环境搭建 安卓开发环境与常用布局 第一章 Android 简介与开发环境搭建 本章目标 3G 的概念 Android 的改变 Android 开发环境的搭建编写第一个 Android 程序 Android 程序的目录结构 手机发展史 1. 3G 的概念 3G 全称为 :3rd Generation, 中文含义即为第三代数字通信, 是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统 2. 符合 3G

More information

實作SQLiteOpenHelper類別

實作SQLiteOpenHelper類別 SQLiteOpenHelper 類別存取 SQLite 建國科技大學資管系 饒瑞佶 2013/5 V1 Android 連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫 Android vs. SQLite 透過 SQLiteOpenHelper 類別來操作 建立資料庫 ( 建構子 ) 建立資料表

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

The Embedded computing platform

The Embedded computing platform Android User Interfaces Hsiao-Lung Chan, Ph.D. Dept Electrical Engineering Chang Gung University, Taiwan chanhl@maili.cgu.edu.tw Basic control components Text components TextView EditText Button compoents

More information

题目

题目 开发 Android 应用 目的 : 帮助大家了解 Android 平台开发 作者 : 王威威 技术爱好 : linux,qt, 嵌入式开发 MSN : wangweiweicdma@hotmail.com Email : wang.weiwei1@ztenc.com.cn wangjiecdma@126.com 下载开发资源 1 下载最新的 Android SDK http://code.google.com/android/download.html

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

建模与图形思考

建模与图形思考 C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂 3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数 如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 多个用户界面的程序设计 3.1 页面的切换与传递参数值 3.1.1 传递参数组件 Intent Intent 是 Android 系统的一种运行时的绑定机制, 在应用程序运行时连接两个不同组件 在 Android 的应用程序中不管是页面切换还是传递数据或是调用外部程序都可能要用到 Intent Intent 负责对应用中某次操作的动作 动作涉及的数据 附加数据进行描述, Android

More information

RecyclerView and CardVew

RecyclerView and CardVew RecyclerView and CardView 建國科技大學資管系饒瑞佶 2017/10 V1 CardView CardView A CardView is a ViewGroup. Like any other ViewGroup, it can be added to youractivity or Fragment using a layout XML file. To create an

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 按钮对象 (button) 当 JavaScript 读到 标记中的 type 属性值为 button 时, 自动建立一个按钮对象, 并将该对象放到表单对象的 elements 数组当中 按钮对象包括 : 普通按钮 (button) 提交按钮 (submit) 重置按钮 (reset) 1. 使用按钮对象的格式 document.forms[ 索引值 ].elements[ 索引值

More information

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx 一 刷新按钮的动画效果 : 在刷新按钮的位置做两个按钮的布局, 一个是原来的静态图片, 一个是旋转的动画, 然 后控制这两个效果的显示和隐藏 ( 一 ) 刷新按钮的 style: 1. 在 app/src/main/res/values/ styles.xml 文件里添加一个 style: 2. 在 drawable 文件夹下新建一个 title_update_anim.xml, 添加如下内容 注

More information

Chapter 4

Chapter 4 Chapter 4 手機控制項應用 元件佈局 線性佈局共有兩個方向 : 垂直 (vertical) 水帄 (horizontal) 決定垂直或是水帄的屬性為 Orientation android:orientation="vertical" 線性佈局就是將在 < LinearLayout > 內的元件以線性的方式來呈現

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

建立Android新專案

建立Android新專案 經濟部工業局 Android 智慧型手機程式設計實務應用班 Android WebService 建國科技大學資管系 饒瑞佶 2012/4 WebService 需要 ksoap2-android-assembly-2.5.2-jar-withdependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-withdependencies_timeout1.jar

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

Android 开发教程

Android 开发教程 封面 1 GUI 可视化设计器 DroidDraw DroidDraw 是一个基于 Java Swing 的 Android 界面设计器, 可以通过它来生成复杂的 Android Layout XML 文 件,Android 的 Layout 和 Swing Layout 中有很好的对应, 设计器的代码编写起来比较容易 2 AnDroidDraw AnDroidDraw 是一个与 DroidDraw

More information

第 5 章 Android 控件进阶操作实战 ArrayAdapter 适配器 ListView 的数据渲染都需要借助适配器来完成, 首先看一下结合最简单的 ArrayAdapter 来实现 ListView 主布局文件 (activity_main.xml) 代码如下 : <?

第 5 章 Android 控件进阶操作实战 ArrayAdapter 适配器 ListView 的数据渲染都需要借助适配器来完成, 首先看一下结合最简单的 ArrayAdapter 来实现 ListView 主布局文件 (activity_main.xml) 代码如下 : <? 108 Android 开发入门百战经典 第 5 章 Android 控件进阶操作实战 5.1 控之经典 ListView ListView 是最经典的控件之一, 虽然现在其江山地位不稳, 将要被 RecylerView 取 代, 但设计理念是很经典的, 而且很多程序员还是习惯了 ListView, 因此我们还需要对 ListView 进行深入学习 ListView 内容非常多, 读者要有足够的耐心进行学习,

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年秋北京 Android是什么 Android不仅仅是一个操作系统 它更是一个完整的软件框 架 Android基于Linux内核 2005年Google公司收购了Android公司 Google公司选择使用Apache许可证开放Android源码

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -TableLayout Toast AlertDialog 國立高雄大學資訊工程學系張保榮教授 大綱 TableLayout 版面配置 Toast 版面配置 AlertDialog 版面配置 TableLayout

More information

人民邮电

人民邮电 第 2 章 布 局 布 局 是 所 有 带 界 面 的 Android 程 序 的 开 端 布 局 应 用 得 好 坏 直 接 决 定 了 程 序 的 用 户 体 验 虽 然 布 局 看 似 没 有 组 件 复 杂, 但 也 涉 及 到 了 很 多 技 巧 在 各 大 公 司 的 面 试 题 中 也 会 经 常 遇 到 关 于 布 局 的 一 些 问 题 通 过 这 些 问 题 可 以 考 查 应

More information

百度xx SDK用户手册

百度xx SDK用户手册 社会化分享 Android 组件 用户手册 (1.1.0 版 ) 发布日期 : 2013 年 5 月 10 日 百度开发者中心 ( 版权所有, 翻版必究 ) 目录 第 1 章 概述... 3 第 2 章 运行环境... 3 第 3 章 使用说明... 3 3.1 新建工程... 3 3.2 引入社会化分享 JAR 包... 4 3.3 配置 ANDROIDMANIFEST.XML... 4 3.4

More information

可 Web 编程的NativeUI 设计与实现

可 Web 编程的NativeUI  设计与实现 可 Web 编程的 NativeUI 设计与实现 张袁炜 zhangyuanwei@baidu.com 欢迎转岗简历请发 About Me @ 张袁炜 直达号 网址导航 百度 音乐 前端 Node.js Android Arduino RaspberryPI https://github.com/zhangyuanwei Outline 一个 Hybrid App 的进化史 Native UI 实现原理

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 章.1 Android UI 基本概念 用户界面 (User Interface,UI) 是用户与设备之间进行信息交流的直接媒介, 是决定用户体验最重要的部分 相比于早期的计算机的主要交互界面 批处理界面和命令行界面, 现在更为流行的是更简单直接的用户图形界面 (Graphical User Interface, GUI) GUI 简单易用, 受众面广, 直接推动了个人计算机的发展 目前, 主流大众的操作系统都采用了

More information

Microsoft Word - 第4章 3D相册.doc

Microsoft Word - 第4章 3D相册.doc 第 4 章 3D 相册 学习目标 u 掌握相册界面的开发, 实现相册的立体与倒影效果 在现实生活中, 我们浏览照片时, 不同的相册软件有不同的浏览效果 本章主要实现了一个 3D 效果的相册, 该相册中的图片可以循环滑动展示 4.1 3D 相册 任务综述 相册界面主要是展示一组图片的立体效果, 并显示每个图片的倒影, 左右滑动可以切换不同的图片到 界面的中间位置, 同时在图片下方显示当前图片的标题,

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

Android + NFC

Android + NFC Android + NFC 建國科技大學資管系饒瑞佶 2017/3 v1 讀取 Tag UUID Android 2.3.3 (API Level 10) 才有支援完整的 NFC 功能 只要 NFC 相容都讀的到 (NFC 或 Mifare) 建立新專案修改 AndroidManifest.xml 加入 , 如果有 NFC Tag 進入感測範圍, 本 App 也會變成可處理的

More information

Android 开发教程

Android 开发教程 封面 1 文件存取编程基础 文件 文件可以用来存储比使用引用更大数量的数据 Android 提供方法来读 写文件 只有本地文件可以被访问 优点 : 可以存储大容量的数据 缺点 : 文件更新或是格式改变可能会导致巨大的编程工作 文件操作 读文件 Context.openFileInput(String name) 打开一个与应用程序联系的私有文件输入流 当文件不存在时抛出 FileNotFoundException

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

Android Android Android SDK iv

Android Android Android SDK iv Android Market Google Android SDK Apple Google Microsoft b2c b 2010 Internet Android how why iii Android 240... Android Android SDK iv Android Market Google Android SDK Visual C++ Java N-tier J2EE Unix/Linux

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

云数据库 RDS SDK

云数据库 RDS SDK 云数据库 RDS SDK SDK SDK 下载 SDK 下载 最新版本 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip 历史版本 2015-11-3 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip JAVA 教程 JAVA 创建 Access Key 登陆阿里云账号 打开 我的 Access

More information

Microsoft PowerPoint - 08_Android_Spring11_Control2.pptx

Microsoft PowerPoint - 08_Android_Spring11_Control2.pptx 作者 : 李昭賢作者 : 洪振偉編撰整理者 : 陳彥霖 學習目標 1. 透過 XML 產生控制項 2. 透過 Java 產生控制項 3. 新增事件 (Event) 處理 AnalogClock / DigitalClock 負責顯示時間 AnalogClock: 以傳統鐘錶指針方式顯示時與分 DigitalClock: 以數位數字方式顯示時 分與秒 類比小時鐘 (AnalogClock 類別 ) 數位小時鐘

More information

建立Android新專案

建立Android新專案 Android 智 慧 型 手 機 程 式 設 計 Android WebService 建 國 科 技 大 學 資 管 系 饒 瑞 佶 2012/4 V1 2012/8 V2 2013/5 V3 2014/10 v4 提 醒 這 節 的 內 容 針 對 的 是 MS 的 Web Service 或 是 使 用 SOAP(Simple Object Access Protocol) 標 準 建 立

More information

Android 基礎教學

Android 基礎教學 Android 基礎教學 吳柏翰 1 Outline Android 歷史起源 Android 優勢與市場未來趨勢 安裝 Android SDK 建立專案 模擬器的執行與操作 使用 Log 及 IDE 除錯工具 實機運作 2 Android 歷史起源 起源 隨著手機與網際網路結合, 上網普及化之後, 使用者對手機的功能有截然不同的需求 透過網際網路, 各種新的服務與應用應運而生, 使用者也希望手機平台能像電腦一樣,

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

untitled

untitled 1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

untitled

untitled 1 LinkButton LinkButton 連 Button Text Visible Click HyperLink HyperLink 來 立 連 Text ImageUrl ( ) NavigateUrl 連 Target 連 _blank _parent frameset _search _self 連 _top 例 sample2-a1 易 連 private void Page_Load(object

More information

RxJava

RxJava RxJava By 侦跃 & @hi 头 hi RxJava 扩展的观察者模式 处 观察者模式 Observable 发出事件 Subscriber 订阅事件 bus.post(new AnswerEvent(42)); @Subscribe public void onanswer(answerevent event) {! }! Observable observable = Observable.create(new

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 Android 控件进阶 要设计出让用户喜欢的 Android 应用程序界面, 除了需要用到在第 2 章讲的最基本的 TextView EditText 和 Button 控件外, 还要用到其他控件, 如 ImageButton 控件 ImageView 控件 RadioButton 控件 CheckBox 控件和 ListView 控件等 本章主要讲解功能强大 应用广泛的一些控件 3.1

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一八年秋北京 Android 是什么 Android 不仅仅是一个操作系统, 它更是一个完整的软件框架 Android 基于 Linux 内核 2005 年 Google 公司收购了 Android 公司 Google 公司选择使用 Apache

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5 2

单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5 2 单击以编辑母片标题样式 安卓系统 Android 的排版 授课老师 : 谢兆贤 2016/4/18 1 单击以编辑母片 Content 标题样式 LinearLayout 排版模式 TableLayout 排版模式 RelativeLayout 排版模式 AbsoluteLayout 排版模式 FrameLayout 排版模式 GridLayout 排版模式 TabWidget 切換卡 Lab 5

More information

Android 教學

Android 教學 Android 教 學 2012/3/27 Presented by : Wun-ling E-mail: wunling@iir.csie.ncku.edu.tw Advisor: Dr. Chiang 大 綱 Android 介 紹 Android 環 境 設 定 應 用 程 式 架 構 Manifest 定 義 檔 資 源 檔 設 計 UI 元 件 設 計 硬 體 元 件 Sample 2012/3/27

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

小应用 Magic8

小应用 Magic8 胡家威 计研135班 http://hujiaweibujidao.github.io/ 小应用 Magic8 Android 系统简介 Android 应用结构 Android 四大组件 Activity 生命周期 Android 资源管理 UI 组件和容器组件 内容概要 ( 上 ) Android 系统简介 Android 市场份额 Android 是如何诞生的? Android 之父 :Andy

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

Microsoft Word - Android 7.x.doc

Microsoft Word - Android 7.x.doc 第 4 章 Android GUI 开发 Android 系统提供了丰富的可视化界面组件, 包括菜单 按钮 对话框等 Android 系统采用 Java 程序设计中的 UI 设计思想, 其中包括事件处理机制及布局管理方式 Android 系统中的所有 UI 类都是建立在 View 和 ViewGroup 两个类的基础之上的, 所有 View 的子类称为 Widget, 所有 ViewGroup 的子类称为

More information

_banneradview.settest(true); _banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanner

_banneradview.settest(true); _banneradview.setuserkeywords(swimming); _banneradview.setusercategories(1,3,4); _banneradview.setusergender(jdbanner 京东 APP 联盟 SDK Android 版接口说明文档 1.0 1. 嵌入 SDK 1.1 添加 SDK Android Studio 环境 : 菜单 New->New Module->Import.jar or.aar package, 然后选中 App 联盟 SDK 所带的 jar 文件 Eclipse+ADT 环境 : 将 App 联盟 SDK 所带的 jar 文件拷贝到 libs/ 目录下

More information

1. 2. Flex Adobe 3.

1. 2. Flex Adobe 3. 1. 2. Flex Adobe 3. Flex Adobe Flex Flex Web Flex Flex Flex Adobe Flash Player 9 /rich Internet applications/ria Flex 1. 2. 3. 4. 5. 6. SWF Flash Player Flex 1. Flex framework Adobe Flex 2 framework RIA

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

手说TTS开发指南

手说TTS开发指南 手说 TTS 开发指南 v1.3 2011 年 6 月 版权所有 : 手说工作室 shoushuo.com 版本时间作者说明 1.0 2010-11-15 张波 1.1 2010-12-27 在 ondestroy 方法 unbindservice 1.2 2010-12-30 1.3 2011-6-12 去掉 TTS 初始化 ; ttsservice.initialize() 方法调用添加接口方法

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

03 开发入门.key

03 开发入门.key #3 手机应用开发入门 刘宁 Email:liuning2@mail.sysu.edu.cn 大纲» Android 基本概念» 开发包及 工具安装» 创建 HelloWorld» Android 程序设计基础 2 Android 开发基本概念» Activities» Intents» 视图与控件 ( 界 面元素 )» 异步调 用 ( 多线程 支持 )» 后台服务 3 Activities Android

More information

大漠 伪前端, 就职于淘宝

大漠 伪前端, 就职于淘宝 CSS Grid Layout 2016-12-17 @ 大漠. #CSSConf https://www.flickr.com/photos/19139526@n00/8331063530/ 大漠 伪前端, 就职于淘宝 古老的 table 布局 现代 Web 布局 Float inline-block display: table position (absolute 或 relative)

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

第6讲

第6讲 UI 及 图 形 应 用 开 发 技 术 哈 尔 滨 工 业 大 学 软 件 学 院 唐 好 选 Email:tanghx@hit.edu.cn 主 要 内 容 Android UI 布 局 图 形 控 件 常 用 的 XML 属 性 图 形 界 面 中 常 用 的 控 件 元 素 菜 单 对 话 框 Android 的 UI 布 局 为 了 适 应 各 式 各 样 的 界 面 风 格,Android

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

Microsoft PowerPoint - chapter05.ppt

Microsoft PowerPoint - chapter05.ppt 第 5 章 Android 用户界面 本章学习目标 了解用户界面基础知识 掌握几个常用界面控件使用方法 掌握界面布局基本方法 掌握菜单设计基本方法 了解 Android 界面框架调用界面控件的事件处理函数对事件进行处理的方法 Android UI 组件概述 应用程序的好坏, 主要有三个元素决定 界面 功能 性能 界面给用户的第一感觉至关重要 UI 的设计与控制是程序开发核心内容之一 Android

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

0511-Android程式之GPS應用_專題週記4

0511-Android程式之GPS應用_專題週記4 逢甲大學通訊工程學系專題研究 Android 程式之 GPS 應用 專題週記 0511 學生姓名 陳彥儒 D0035131 廖元譽 D0077791 指導老師 楊豐瑞老師繳交日期 2014.05.11 1 匯入 GoogleMap 1.1 取得授權步驟 目前進度 取得 Google 授權鑰匙 實作程式尚未成功 1.1.1 建立個人的 keystore 1.1.2 由個人的 keystore 查詢 SHA1

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

投影片 1

投影片 1 Chapter 13 Android 實戰演練 線上匯率查詢 線上匯率查詢 本節範例將實作一個簡單的線上費率查詢, 利用 Url 查詢台灣銀行的即時匯率, 欲查詢的網址為 http://rate.bot.com.tw/pages/static/uip003.zh- TW.htm 此網頁中每隔幾分鐘會更新一次匯率, 所以範例程式在一開啟時會抓取此網頁並將網頁內容解析後將匯率資料取出 線上匯率查詢 台灣銀行線上即時匯率查詢

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

_banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanneradview.gender_male); _bannera

_banneradview.setuserkeywords(swimming); _banneradview.setusercategories(1,3,4); _banneradview.setusergender(jdbanneradview.gender_male); _bannera 京东与 AdView APP 联盟 SDK Android 版接口说明文档 1.5 1. 嵌入 SDK 1.1 添加 SDK Android Studio 环境 : 菜单 New->New Module->Import.jar or.aar package, 然后选中 App 联盟 SDK 所带的 jar 文件 Eclipse+ADT 环境 : 将 App 联盟 SDK 所带的 jar 文件拷贝到

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID 58 2016. 14 * LireSolr LireSolr CEDD Ajax CSpace LireSolr CEDD Abstract In order to offer better image support services it is necessary to extend the image retrieval function of our institutional repository.

More information