内 容 简 介 本 书 以 Android 应 用 程 序 的 开 发 为 主 题, 并 结 合 真 实 的 案 例 向 读 者 详 细 介 绍 了 Android 的 基 本 组 件 的 使 用 及 应 用 程 序 开 发 的 整 个 流 程 本 书 的 讲 述 由 浅 入 深, 实 例 全 面

Similar documents
人民邮电

PowerPoint Presentation

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

Microsoft Word - 第5章.doc

<4D F736F F D20B5DA33D5C220B3CCD0F2C9E8BCC6BBF9B4A12E646F6378>

版权声明

PowerPoint Presentation

ZYWGML

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

眼病防治

中国南北特色风味名菜 _八)

版权页.doc

第6讲

Android Android Android SDK iv

Microsoft Word - Panel Paper on T&D-Chinese _as at __final_.doc

Dynamic Layout in Android

心理障碍防治(下).doc

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc

南華大學數位論文

李天命的思考藝術

皮肤病防治.doc

性病防治

中国南北特色风味名菜 _一)

全唐诗24

509 (ii) (iii) (iv) (v) 200, , , , C 57

Android 开发教程

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

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

樹 木 管 理 專 責 小 組 報 告 人 樹 共 融 綠 滿 家 園

绝妙故事

榫 卯 是 什 麼? 何 時 開 始 應 用 於 建 築 中? 38 中 國 傳 統 建 築 的 屋 頂 有 哪 幾 種 形 式? 40 大 內 高 手 的 大 內 指 什 麼? 42 街 坊 四 鄰 的 坊 和 街 分 別 指 什 麼? 44 北 京 四 合 院 的 典 型 格 局 是 怎 樣 的

建立Android新專案

Microsoft Word - 内容提要2.doc

中医疗法(下).doc

穨學前教育課程指引.PDF

全唐诗28

「香港中學文言文課程的設計與教學」單元設計範本

Microsoft Word - 中三選科指南 2014 subject

untitled

Microsoft PowerPoint - 03 开发入门.ppt [兼容模式]

Android 教學

中医疗法(上).doc

Microsoft Word - Android 7.x.doc

39898.indb

穨ecr2_c.PDF

電腦相關罪行跨部門工作小組-報告書

i

发展党员工作手册

i

vi 黃 帝 內 經 即 學 即 用 別 做 反 自 然 的 事 053 成 年 人 應 該 斷 奶 055 吃 肉 吃 素 因 人 而 異 057 要 分 清 飢 和 餓 058 生 活 現 代 化 與 本 能 退 化 061 調 神 就 是 調 節 奏 063 想 冬 泳, 先 問 問 自 己

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


Microsoft Word - report final.doc

中南大学第二届软件创新大赛

./

Android 应 用 开 发 实 践 教 程 进 行 控 制, 这 也 是 较 为 推 荐 的 一 种 方 式 动 态 方 式 是 指 通 过 Java 代 码 来 开 发 用 户 界 面, 动 态 地 控 制 界 面 中 的 组 件 XML 布 局 文 件 控 制 用 户 界 面 利 用 XML

一、

Microsoft Word - Pac-R61_Chapter 3 _full_.doc

Android Service

-i-

Microsoft Word - 强迫性活动一览表.docx

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

编后记

江苏宁沪高速公路股份有限公司.PDF

天主教永年高級中學綜合高中課程手冊目錄

2. 我 沒 有 說 實 話, 因 為 我 的 鞋 子 其 實 是 [ 黑 色 / 藍 色 / 其 他 顏 色.]. 如 果 我 說 我 現 在 是 坐 著 的, 我 說 的 是 實 話 嗎? [ 我 說 的 對 還 是 不 對 ]? [ 等 對 方 回 答 ] 3. 這 是 [ 實 話 / 對 的



从 因 人 设 事 谈 起 一 部 文 学 作 品 ( 尤 其 是 长 篇 小 说 ) 的 结 构 至 关 重 要, 因 为 它 是 文 本 整 体 的 组 织 方 式 和 内 部 构 造, 既 是 形 式 又 是 内 容 ; 乃 是 表 达 主 题 最 有 效 的 艺 术 手 段 元 代 戏 曲

循经指压疗法

Microsoft Word - HERBRECIPES《中國藥膳》.doc

毛主席的猪

附件1.FIT)


北魏山东佛教文化个案研究

Microsoft Word - Paper on PA (Chi)_ docx

: ( ) ( ) : () ( ) ( )

Page i

捕捉儿童敏感期

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

<4D F736F F D203938BEC7A67EABD7B942B0CAC15AC075B3E6BF57A9DBA5CDC2B2B3B92DA5BFBD542E646F63>

ZYXM.S2

世界名画及画家介绍(四).doc

清华大学2013年毕业生就业质量报告

尿路感染防治.doc

Microsoft Word - 扉页

声 明 本 公 司 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 股 票 发 行 方 案 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 和 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 根 据 证 券 法 的 规 定

___证券投资基金招募说明书1

___证券投资基金招募说明书1

中 国 近 现 代 史 纲 要 重 要 会 议 ( 一 ) 党 的 创 建 时 期 1. 一 大 ( , 上 海 ), 中 国 共 产 党 成 立 (1) 内 容 :1 确 定 党 的 名 称 为 中 国 共 产 党 2 通 过 了 中 国 共 产 党 第 一 个 党 纲 : 以 无

发 展 为 目 标, 以 发 挥 事 务 所 党 组 织 战 斗 堡 垒 作 用 和 党 员 先 锋 模 范 作 用 为 重 点, 以 党 务 工 作 者 队 伍 建 设 为 支 撑, 以 制 度 机 制 建 设 为 保 障, 不 断 创 新 理 念 措 施 和 载 体, 在 新 的 起 点 上 全

2013年全区基层党建工作

广州民航职业技术学院

就 是 要 步 步 深 入 环 环 相 扣, 以 严 肃 的 态 度 严 抓 的 韧 劲, 把 全 面 从 严 治 党 的 良 好 态 势 巩 固 发 展 下 去, 做 到 真 管 真 严 长 管 长 严 开 展 两 学 一 做 学 习 教 育, 是 推 进 思 想 政 治 建 设 常 态 化 制

<4D F736F F D20BBA6CBC9BDCCB0ECA1B A1B33731BAC520B8BDBCFE2E646F63>

晋中师~1

緒 言 董 事 會 宣 佈, 為 能 更 具 效 率 調 配 本 集 團 內 的 資 金 有 效 降 低 集 團 的 對 外 貸 款, 並 促 進 本 集 團 內 公 司 間 的 結 算 服 務, 於 2016 年 9 月 30 日, 本 公 司 中 糧 財 務 與 管 理 公 司 訂 立 財 務

目 录 院 领 导 职 责... 1 院 长 职 责... 1 医 疗 副 院 长 职 责... 1 教 学 副 院 长 职 责... 2 科 研 副 院 长 职 责... 2 后 勤 副 院 长 职 责... 3 主 管 南 院 区 副 院 长 职 责... 3 党 委 书 记 职 责... 4

<4D F736F F D20A4A4B0EAB371AB4FB3E65FA4A4A4E5AAA95F5F >

招商银行(600036)可转换公司债券发行公告

(i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (xi) 60.99%39.01%

Transcription:

内 容 简 介 本 书 以 Android 应 用 程 序 的 开 发 为 主 题, 并 结 合 真 实 的 案 例 向 读 者 详 细 介 绍 了 Android 的 基 本 组 件 的 使 用 及 应 用 程 序 开 发 的 整 个 流 程 本 书 的 讲 述 由 浅 入 深, 实 例 全 面 并 典 型, 几 乎 囊 括 了 所 有 和 Android 应 用 相 关 的 项 目 全 书 分 为 17 章, 分 别 讲 解 了 UI 布 局 实 例 集 锦 控 件 实 例 集 锦 自 动 化 服 务 实 例 集 锦 数 据 存 储 实 例 集 锦 电 话 和 短 信 实 例 集 锦 图 形 图 像 实 例 集 锦 和 网 络 有 关 的 实 例 集 锦 多 媒 体 实 例 集 锦 Google 地 图 实 例 集 锦 Google API 实 例 集 锦 平 板 应 用 实 例 集 锦 游 戏 应 用 与 程 序 优 化 并 且 在 本 书 最 后, 通 过 4 个 大 型 综 合 实 例, 分 别 介 绍 了 开 发 手 机 地 图 系 统 音 乐 播 放 器 系 统 NBA 激 情 投 篮 游 戏 综 合 邮 件 系 统 的 基 本 过 程 本 书 基 础 翔 实, 实 例 丰 富, 案 例 真 实, 适 合 Android 程 序 开 发 的 不 同 用 户, 既 可 以 作 为 初 学 者 的 参 考 资 料, 也 可 以 作 为 向 此 领 域 发 展 的 程 序 员 的 参 考 书 未 经 许 可, 不 得 以 任 何 方 式 复 制 或 抄 袭 本 书 之 部 分 或 全 部 内 容 版 权 所 有, 侵 权 必 究 图 书 在 版 编 目 (CIP) 数 据 Android 开 发 实 例 大 全 / 王 东 华 编 著. 北 京 : 电 子 工 业 出 版 社,2012.8 (Android 移 动 开 发 技 术 丛 书 ) ISBN 978-7-121-17317-2 Ⅰ. 1A Ⅱ. 1 王 Ⅲ. 1 移 动 终 端 - 应 用 程 序 - 程 序 设 计 Ⅳ. 1TN929.53 中 国 版 本 图 书 馆 CIP 数 据 核 字 (2012) 第 121355 号 策 划 编 辑 : 张 月 萍 责 任 编 辑 : 董 英 印 刷 : 北 京 中 新 伟 业 印 刷 有 限 公 司 装 订 : 三 河 市 皇 庄 路 通 装 订 厂 出 版 发 行 : 电 子 工 业 出 版 社 北 京 市 海 淀 区 万 寿 路 173 信 箱 邮 编 :100036 开 本 : 787 1092 1/16 印 张 :45.75 字 数 :1171 千 字 印 次 : 2012 年 8 月 第 1 次 印 刷 印 数 : 3500 册 定 价 :89.00 元 凡 所 购 买 电 子 工 业 出 版 社 图 书 有 缺 损 问 题, 请 向 购 买 书 店 调 换 若 书 店 售 缺, 请 与 本 社 发 行 部 联 系, 联 系 及 邮 购 电 话 :(010)88254888 质 量 投 诉 请 发 邮 件 至 zlts@phei.com.cn, 盗 版 侵 权 举 报 请 发 邮 件 到 dbqq@phei.com.cn 服 务 热 线 :(010)88258888

Android 移 动 开 发 技 术 丛 书 Android 开 发 实 例 大 全 王 东 华 编 著

前 言 前 言 随 着 3G 的 到 来, 无 线 带 宽 越 来 越 宽, 使 得 更 多 内 容 丰 富 的 应 用 程 序 装 入 手 机 成 为 可 能, 如 视 频 通 话 视 频 点 播 移 动 互 联 网 冲 浪 和 内 容 分 享 等 为 了 承 载 这 些 数 据 应 用 及 快 速 部 署, 手 机 功 能 将 会 越 来 越 智 能, 越 来 越 开 放 为 了 实 现 这 些 需 求, 必 须 有 一 个 好 的 开 发 平 台 来 支 持, 在 此 由 Google 公 司 发 起 的 OHA 联 盟 走 在 了 业 界 的 前 列,2007 年 11 月 推 出 了 开 放 的 Android 平 台, 任 何 公 司 及 个 人 都 可 以 免 费 获 取 源 代 码 及 开 发 SDK 由 于 其 开 放 性 和 优 异 性,Android 平 台 得 到 了 业 界 广 泛 的 支 持, 其 中 包 括 各 大 手 机 厂 商 和 著 名 的 移 动 运 营 商 等 继 2008 年 9 月 第 一 款 基 于 Android 平 台 的 手 机 G1 发 布 之 后, 三 星 摩 托 罗 拉 索 爱 LG 等 主 流 手 机 制 造 商 都 推 出 了 自 己 的 Android 平 台 手 机 在 2011 年 底,Android 超 越 了 塞 班 和 ios, 雄 踞 智 能 手 机 市 场 占 有 率 榜 首 的 位 置 毕 竟 Android 平 台 被 推 出 的 时 间 才 短 短 5 年, 了 解 Android 平 台 软 件 开 发 技 术 的 程 序 员 还 不 多, 如 何 迅 速 地 推 广 和 普 及 Android 平 台 软 件 开 发 技 术, 让 越 来 越 多 的 人 参 与 到 Android 应 用 的 开 发 中, 是 整 个 产 业 链 都 在 关 注 的 一 个 话 题 为 了 帮 助 开 发 者 更 快 地 进 入 Android 开 发 行 列, 笔 者 特 意 精 心 编 写 了 本 书 本 书 以 Android 应 用 程 序 的 开 发 为 主 题, 并 结 合 真 实 的 案 例 向 读 者 详 细 介 绍 了 Android 的 基 本 组 件 的 使 用 及 应 用 程 序 开 发 的 整 个 流 程 本 书 的 讲 述 由 浅 入 深, 实 例 全 面 并 典 型, 几 乎 囊 括 了 所 有 和 Android 应 用 相 关 的 项 目 从 技 术 角 度 而 言,Android 是 一 种 融 入 了 全 部 Web 应 用 的 平 台 随 着 版 本 的 更 新, 从 最 初 的 触 屏 到 现 在 的 多 点 触 摸, 从 普 通 的 联 系 人 到 现 在 的 数 据 同 步, 从 简 单 的 Google Map 到 现 在 的 导 航 系 统, 从 基 本 的 网 页 浏 览 到 现 在 的 HTML 5, 这 都 说 明 Android 已 经 逐 渐 稳 定, 而 且 功 能 越 来 越 强 大 此 外,Android 平 台 不 仅 支 持 Java C C++ 等 主 流 的 编 程 语 言, 还 支 持 Ruby Python 等 脚 本 语 言,Google 甚 至 专 为 Android 应 用 开 发 推 出 了 Simple 语 言, 这 使 得 Android 有 着 非 常 广 泛 的 开 发 群 体 本 书 的 内 容 在 本 书 的 内 容 中, 按 不 同 的 门 类 提 供 了 138 个 实 例, 并 在 本 书 的 最 后 提 供 了 4 大 完 整 案 例, 主 要 内 容 如 下 章 第 1 章 第 2 章 主 要 内 容 UI 布 局 实 例 控 件 开 发 实 例 III

Android 开 发 实 例 大 全 第 3 章 自 动 化 服 务 实 例 续 表 章 第 4 章 第 5 章 第 6 章 第 7 章 第 8 章 第 9 章 第 10 章 第 11 章 第 12 章 第 13 章 第 14 章 第 15 章 第 16 章 第 17 章 主 要 内 容 数 据 存 储 实 例 电 话 和 短 信 实 例 图 形 图 像 实 例 网 络 实 例 多 媒 体 实 例 Google 地 图 实 例 Google API 实 例 平 板 实 例 游 戏 实 例 Android 程 序 优 化 手 机 地 图 系 统 音 乐 播 放 系 统 NBA 激 情 投 篮 邮 件 系 统 参 与 本 书 编 写 的 人 员 有 : 王 东 华 王 振 丽 熊 斌 朱 桂 英 周 秀 邓 才 兵 罗 红 仙 王 石 磊 孙 宇 程 娟 王 文 忠 王 梦 陈 强 于 洋 管 西 京 本 团 队 由 于 时 间 和 水 平 所 限, 书 中 难 免 有 不 足 之 处 如 有 纰 漏 和 不 尽 如 人 意 之 处, 诚 请 读 者 提 出 意 见 或 建 议, 以 便 修 订 并 使 之 更 臻 完 善 另 外, 为 了 更 好 地 为 读 者 服 务, 我 们 专 门 提 供 了 技 术 支 持 网 站 www.topchuban.com, 欢 迎 读 者 光 临 论 坛, 无 论 是 书 中 的 疑 问, 还 是 学 习 过 程 中 的 疑 惑, 本 团 队 将 尽 力 为 大 家 解 答 请 访 问 www.broadview.com.cn/17317 下 载 本 书 的 相 关 资 源 编 者 2012 年 7 月 IV

目 录 目 录 第 1 章 UI 布 局 开 发 实 例 集 锦... 1 实 例 001: 使 用 线 性 布 局 (LinearLayout) 来 布 局 屏 幕... 1 实 例 002: 使 用 相 对 布 局 (RelativeLayout) 来 布 局 屏 幕... 3 实 例 003: 使 用 表 格 布 局 (TableLayout) 来 布 局 屏 幕... 5 实 例 004: 使 用 绝 对 布 局 (AbsoluteLayout) 来 布 局 屏 幕... 6 实 例 005: 使 用 标 签 布 局 (TabLayout) 来 布 局 屏 幕... 8 实 例 006: 使 用 层 布 局 (FrameLayout)... 10 实 例 007: 创 建 一 个 桌 面 组 件 Widget... 11 实 例 008: 在 屏 幕 中 实 现 一 个 按 钮 效 果... 12 实 例 009: 在 屏 幕 中 显 示 文 字... 13 实 例 010: 在 屏 幕 中 显 示 编 辑 框... 17 实 例 011: 在 屏 幕 中 显 示 复 选 框... 18 实 例 012: 在 屏 幕 中 显 示 单 选 框... 21 实 例 013: 在 屏 幕 中 显 示 下 拉 列 表 框... 22 实 例 014: 在 屏 幕 中 实 现 自 动 输 入 文 本 效 果... 26 实 例 015: 使 用 日 期 选 择 器 控 件 DatePicker... 28 实 例 016: 自 动 选 择 一 个 输 入 时 间... 30 实 例 017: 实 现 屏 幕 自 动 滚 动... 32 实 例 018: 实 现 一 个 进 度 条 效 果... 32 实 例 019: 开 发 一 个 评 分 程 序... 35 实 例 020: 在 屏 幕 中 显 示 一 幅 指 定 的 图 片.. 36 实 例 021: 设 置 一 幅 图 片 作 为 按 钮 来 使 用.. 38 实 例 022: 实 现 QQ 空 间 中 的 显 示 照 片 效 果... 40 第 2 章 控 件 开 发 实 例 集 锦... 44 实 例 023: 显 示 在 文 本 框 中 输 入 的 信 息... 44 实 例 024: 使 用 RadioGroup 控 件 实 现 选 项 选 择 功 能... 46 实 例 025: 使 用 CheckBox 控 件 实 现 同 意 条 款 效 果... 48 实 例 026: 使 用 Spinner 控 件 实 现 选 项 选 择... 51 实 例 027: 使 用 Gallery 控 件 实 现 个 人 相 簿 功 能... 55 实 例 028: 开 发 一 个 文 件 搜 索 程 序... 58 实 例 029: 单 击 按 钮 后 实 现 按 钮 置 换... 60 实 例 030: 模 拟 实 现 一 个 时 钟 界 面 效 果... 62 实 例 031: 联 合 使 用 DatePicker 和 TimePicker 来 选 择 日 期 和 时 间... 65 实 例 032: 动 态 分 隔 手 机 屏 幕... 68 实 例 033: 使 用 ListActivity 实 现 动 态 菜 单 列 表... 71 实 例 034: 加 载 手 机 磁 盘 中 的 文 件... 73 实 例 035: 实 现 抽 屉 样 式 效 果... 76 V

Android 开 发 实 例 大 全 实 例 036: 在 屏 幕 中 动 态 显 示 多 种 对 话 框.. 82 实 例 037: 手 机 秘 书 重 要 事 情 提 醒... 88 实 例 038: 动 态 添 加 或 删 除 菜 单... 96 实 例 039: 自 定 义 Android 控 件 实 现 单 选 按 钮... 100 实 例 040: 使 用 自 定 义 控 件 在 屏 幕 中 绘 制 一 条 虚 线... 104 实 例 041: 在 屏 幕 中 实 现 手 风 琴 效 果... 106 第 3 章 自 动 化 服 务 实 例 集 锦... 109 实 例 042: 自 动 获 取 手 机 屏 幕 的 分 辨 率... 109 实 例 043: 自 动 获 取 手 机 电 池 的 剩 余 电 量... 112 实 例 044: 来 电 时 自 动 发 送 信 息 提 醒... 115 实 例 045: 获 取 手 机 存 储 卡 的 容 量... 119 实 例 046: 操 作 存 储 卡 和 内 存 卡 中 的 数 据... 122 实 例 047: 设 置 闹 钟... 129 实 例 048: 实 现 黑 名 单 来 电 自 动 静 音 处 理... 135 实 例 049: 设 置 一 个 自 动 开 机 界 面... 138 实 例 050: 更 换 手 机 屏 幕 背 景 图 片 系 统... 140 实 例 051: 设 置 自 动 更 换 手 机 桌 面 背 景... 144 实 例 052: 自 动 控 制 后 台 系 统 服 务... 154 实 例 053: 在 屏 幕 中 拖 动 一 个 按 钮... 157 第 4 章 数 据 存 储 实 例 集 锦... 163 实 例 054: 在 屏 幕 中 显 示 SharedPreferences 中 存 储 的 信 息... 163 实 例 055: 演 示 数 据 添 加 删 除 等 操 作... 165 实 例 056: 编 写 一 个 手 机 日 记 本 程 序... 170 实 例 057: 使 用 ContentProvider 开 发 一 个 手 机 日 记 本... 177 实 例 058: 使 用 文 件 保 存 数 据... 188 实 例 059: 将 网 上 的 图 片 保 存 到 SD 卡 并 在 手 机 中 显 示 出 来... 190 实 例 060: 保 存 联 系 人 信 息... 194 第 5 章 电 话 和 短 信 实 例 集 锦... 197 实 例 061: 编 写 一 个 拨 号 程 序... 197 实 例 062: 发 送 一 条 短 信... 200 实 例 063: 单 击 按 钮 实 现 拨 号 功 能... 203 实 例 064: 一 个 通 用 发 短 信 程 序... 206 实 例 065: 收 到 短 信 后 用 E-mail 邮 件 进 行 通 知... 210 实 例 066: 实 现 触 屏 拨 号 功 能... 214 实 例 067: 一 个 短 信 群 发 程 序... 215 实 例 068: 来 电 后 自 动 发 送 邮 件 通 知... 219 实 例 069: 监 听 手 机 拨 接 状 态... 220 实 例 070: 检 查 短 信 是 否 发 送 成 功... 223 第 6 章 图 形 图 像 实 例 集 锦... 229 实 例 071: 在 屏 幕 中 绘 制 一 个 矩 形... 229 实 例 072: 在 屏 幕 中 绘 制 一 个 画 布... 232 实 例 073: 实 现 水 纹 的 透 明 效 果... 235 实 例 074: 渲 染 几 何 图 形... 239 实 例 075: 用 图 片 为 背 景 实 现 动 画 效 果... 242 实 例 076: 在 手 机 屏 幕 中 实 现 Frame 动 画 效 果... 244 实 例 077: 对 图 片 进 行 缩 放 处 理... 246 实 例 078: 旋 转 屏 幕 中 的 图 片... 250 实 例 079: 实 现 旗 帜 飞 扬 的 效 果... 253 实 例 080: 模 拟 构 建 一 个 3D 场 景 效 果... 258 实 例 081: 模 拟 实 现 粒 子 系 统 效 果... 261 实 例 082: 在 Canvas 中 写 文 字... 265 实 例 083: 移 动 屏 幕 中 的 图 片... 272 实 例 084: 在 屏 幕 中 绘 制 一 个 三 维 圆 柱 体... 276 实 例 085: 获 取 并 显 示 图 片 的 宽 和 高... 285 实 例 086: 编 写 一 个 手 机 屏 保 程 序... 287 实 例 087: 以 触 摸 方 式 移 动 图 片... 295 VI

目 录 第 7 章 和 网 络 有 关 的 实 例 集 锦... 299 实 例 088: 传 递 HTTP 参 数... 299 实 例 089: 在 屏 幕 中 使 用 HTML 程 序... 303 实 例 090: 在 手 机 中 浏 览 网 页... 304 实 例 091: 使 用 内 置 浏 览 器 打 开 网 页... 305 实 例 092: 显 示 QQ 空 间 中 的 照 片... 307 实 例 093: 通 过 RSS 系 统 在 线 浏 览 新 闻... 309 实 例 094: 下 载 网 络 图 片 作 为 手 机 背 景... 320 实 例 095: 将 文 件 上 传 至 服 务 器... 323 实 例 096: 开 发 一 个 移 动 博 客 发 布 器... 326 实 例 097: 远 程 下 载 并 安 装 一 个 软 件... 331 实 例 098: 控 制 蓝 牙 系 统... 336 第 8 章 多 媒 体 实 例 集 锦... 346 实 例 099: 播 放 一 个 指 定 的 MP3 文 件... 346 实 例 100: 调 节 手 机 音 量 的 大 小... 350 实 例 101: 实 现 相 机 预 览 和 拍 照 功 能... 353 实 例 102: 在 手 机 中 播 放 影 片... 360 实 例 103: 手 机 录 音 系 统... 363 实 例 104: 设 置 手 机 中 的 铃 声... 368 实 例 105: 在 线 播 放 网 络 中 的 MP3... 371 实 例 106: 在 线 下 载 音 乐 作 为 手 机 铃 声... 379 实 例 107: 播 放 GIF 格 式 的 动 画... 385 实 例 108: 在 手 机 中 播 放 MP4 视 频... 391 实 例 109: 在 线 观 看 3GP 视 频... 394 第 9 章 Google 地 图 实 例 集 锦... 403 实 例 110: 定 位 当 前 位 置 的 坐 标... 403 实 例 111: 在 手 机 中 使 用 Google 地 图... 406 实 例 112: 在 地 图 中 定 位 输 入 的 坐 标... 413 实 例 113: 在 地 图 中 快 速 查 询 某 个 位 置... 416 实 例 114: 随 着 手 机 的 移 动 自 动 更 新 位 置... 418 实 例 115: 在 手 机 地 图 中 描 绘 线 路 并 计 算 线 路 距 离... 423 实 例 116: 在 Google 地 图 中 显 示 指 定 的 位 置... 430 实 例 117: 在 手 机 地 图 中 查 询 一 个 地 址... 432 实 例 118: 在 手 机 中 实 现 地 址 查 询... 434 实 例 119: 开 发 一 个 路 径 导 航 系 统... 438 第 10 章 Google API 实 例 集 锦...446 实 例 120: 模 拟 验 证 官 方 账 号... 446 实 例 121: 在 手 机 中 开 发 一 个 Google 搜 索 程 序... 453 实 例 122: 在 手 机 中 编 写 一 个 翻 译 软 件... 458 实 例 123: 生 成 一 个 二 维 码... 460 实 例 124: 使 用 Google Chart API 生 成 二 维 码... 463 第 11 章 平 板 应 用...469 实 例 125: 开 发 一 个 音 乐 播 放 器... 469 实 例 126: 开 发 一 个 在 线 天 气 播 报 系 统... 475 实 例 127: 开 发 一 个 网 页 浏 览 程 序... 485 实 例 128: 使 用 文 件 来 保 存 音 乐 状 态... 491 实 例 129: 在 屏 幕 中 显 示 不 同 的 进 度 条 效 果... 494 第 12 章 游 戏 应 用...498 实 例 130: 一 个 简 单 的 贪 吃 蛇 游 戏... 498 实 例 131: 开 发 一 个 魔 塔 游 戏... 504 实 例 132: 疯 狂 足 球 游 戏... 524 第 13 章 Android 程 序 优 化...547 实 例 133: 测 试 计 算 机 的 性 能... 547 实 例 134: 测 试 内 存 性 能... 550 实 例 135: 优 化 Android 模 拟 器... 553 实 例 136: 使 用 merge 标 签 优 化 UI 界 面... 556 实 例 137: 优 化 Android Layout... 559 实 例 138: 优 化 Bitmap 图 片... 560 VII

Android 开 发 实 例 大 全 第 14 章 综 合 实 例 手 机 地 图 系 统... 563 实 例 139: 使 用 Google 地 图 开 发 一 个 综 合 地 图 系 统... 563 14.1 项 目 分 析... 563 14.1.1 规 划 UI 界 面... 563 14.1.2 数 据 存 储 设 计... 564 14.2 具 体 实 现... 565 14.2.1 新 建 工 程... 565 14.2.2 主 界 面... 565 14.2.3 新 建 界 面... 567 14.2.4 设 置 界 面... 570 14.2.5 帮 助 界 面... 574 14.2.6 地 图 界 面... 576 14.2.7 数 据 存 取... 587 14.2.8 实 现 Service 服 务... 592 14.3 发 布 自 己 的 作 品 来 赢 利... 594 14.3.1 申 请 成 为 会 员... 594 14.3.2 生 成 签 名 文 件... 597 14.3.3 使 用 签 名 文 件... 602 14.3.4 发 布... 604 第 15 章 综 合 实 例 音 乐 播 放 器 系 统... 605 实 例 140: 开 发 一 个 音 乐 播 放 器... 605 15.1 项 目 介 绍... 605 15.1.1 项 目 背 景 介 绍... 605 15.1.2 项 目 目 的... 606 15.1.3 对 读 者 的 意 义... 606 15.2 需 求 分 析... 606 15.2.1 构 成 模 块... 606 15.2.2 功 能 结 构 图... 609 15.2.3 系 统 功 能 说 明... 610 15.2.4 总 体 目 标... 610 15.3 设 计 数 据 库... 611 15.3.1 字 段 设 计... 611 15.3.2 数 据 库 连 接... 611 15.3.3 创 建 数 据 库... 612 15.3.4 操 作 数 据 库... 613 15.3.5 数 据 显 示... 614 15.4 具 体 编 码... 615 15.4.1 服 务 信 息 主 界 面... 615 15.4.2 播 放 器 主 界 面... 616 15.4.3 播 放 列 表 功 能... 628 15.4.4 菜 单 功 能 模 块... 631 15.4.5 播 放 设 置 界 面... 634 15.4.6 设 置 显 示 歌 词... 638 15.4.7 文 件 浏 览 器 模 块... 639 第 16 章 体 育 类 游 戏 NBA 激 情 投 篮... 644 实 例 141:NBA 激 情 投 篮... 644 16.1 项 目 介 绍... 644 16.1.1 意 义 和 技 术 分 析... 644 16.1.2 策 划 游 戏... 645 16.1.3 准 备 工 作... 645 16.2 项 目 架 构... 646 16.2.1 总 体 架 构... 646 16.2.2 规 划 类... 646 16.3 具 体 编 码... 648 16.3.1 编 写 主 类 LanqiuActivity... 648 16.3.2 编 写 常 量 类... 652 16.3.3 设 计 游 戏 试 玩 界 面... 658 16.3.4 绘 制 游 戏 场 景... 663 第 17 章 综 合 邮 件 系 统... 672 实 例 142: 开 发 一 个 综 合 邮 件 系 统... 672 17.1 项 目 介 绍... 672 17.1.1 项 目 背 景 介 绍... 672 17.1.2 项 目 目 的... 672 17.2 系 统 需 求 分 析... 673 17.2.1 构 成 模 块... 673 17.2.2 系 统 流 程... 675 17.2.3 功 能 结 构 图... 676 17.2.4 系 统 功 能 说 明... 677 17.2.5 系 统 需 求... 677 17.3 数 据 存 储 设 计... 677 VIII

目 录 17.3.1 用 户 信 息 类... 678 17.3.2 SharedPreferences... 682 17.4 具 体 编 码... 684 17.4.1 欢 迎 界 面... 684 17.4.2 系 统 主 界 面... 687 17.4.3 邮 箱 类 型 设 置... 694 17.4.4 邮 箱 收 取 设 置... 697 17.4.5 邮 箱 发 送 设 置... 703 17.4.6 邮 箱 用 户 检 查... 708 17.4.7 设 置 用 户 别 名... 713 17.4.8 用 户 邮 件 编 辑... 716 17.5 总 结... 723 IX

第 1 章 UI 布 局 开 发 实 例 集 锦 外 观 向 来 是 工 业 产 品 的 设 计 核 心, 是 激 发 用 户 购 买 欲 望 的 主 要 因 素 之 一 本 章 讲 的 UI 布 局 指 的 是 手 机 界 面 布 局, 一 款 手 机 的 屏 幕 界 面 效 果 是 吸 引 用 户 购 买 的 重 要 元 素 之 一, 因 为 消 费 者 更 倾 向 于 选 择 界 面 美 观 的 产 品 在 设 计 优 美 的 界 面 之 前, 一 定 要 先 对 屏 幕 进 行 布 局 本 章 将 使 用 具 体 实 例 的 实 现 过 程 介 绍 在 Android 系 统 中 规 划 UI 界 面 的 方 法 实 例 001: 使 用 线 性 布 局 (LinearLayout) 来 布 局 屏 幕 源 码 路 径 :daima\001 知 识 点 介 绍 在 Android 布 局 中, 需 要 了 解 视 图 容 器 组 件 ViewGroup 的 概 念, 使 用 视 图 容 器 组 件 ViewGroup 的 语 法 格 式 如 下 : ndroid.view.viewgroup ViewGroup 的 功 能 是 包 含 并 管 理 下 级 系 列 的 Views 和 其 他 ViewGroup, 是 一 个 布 局 的 基 类 类 ViewGroup 好 像 一 个 View 容 器, 负 责 对 添 加 进 来 的 View 进 行 布 局 处 理 一 个 ViewGroup 可 以 添 加 到 另 一 个 ViewGroup 中 去 这 是 因 为 ViewGroup 也 继 承 于 View.Viewgroup 类, 是 其 他 容 器 类 的 基 类 它 们 之 间 的 关 系 如 图 1-1 所 示 图 1-1 各 个 类 的 继 承 关 系 我 们 知 道, 一 个 Android 程 序 是 由 一 个 或 多 个 Activity 组 成 的, 每 个 Activity 是 一 个 UI 容 器, Activity 本 身 不 在 用 户 界 面 中 显 示 出 来 在 Android 中, 类 View 起 了 一 个 非 常 重 要 的 作 用,View 是 一 个 最 基 本 的 UI 类, 几 乎 所 有 的 UI 组 件 都 是 继 承 于 View 而 实 现 的

Android 开 发 实 例 大 全 使 用 View 的 语 法 格 式 如 下 所 示 android.view.view 线 性 布 局 即 LinearLayout 布 局, 是 Android 屏 幕 中 常 用 的 布 局 方 式 之 一, 功 能 是 垂 直 地 或 水 平 地 显 示 ViewGroup 的 子 视 图 (View) 元 素 具 体 实 现 使 用 Eclipse 创 建 一 个 名 为 001 的 Android 工 程 编 写 布 局 文 件 res/layour/main.xml, 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <Button android:id="@+id/button1" android:text=" 第 一 个 按 钮 " android:layout_weight="1" <Button android:id="@+id/button2" android:text=" 第 二 个 按 钮 " android:layout_weight="1" <Button android:id="@+id/button3" android:text=" 第 三 个 按 钮 " android:layout_weight="1" <Button android:id="@+id/button4" android:text=" 第 四 个 按 钮 " android:layout_weight="1" <Button android:id="@+id/button5" android:text=" 第 五 个 按 钮 " android:layout_weight="1" </LinearLayout> 2

第 1 章 UI 布 局 开 发 实 例 集 锦 在 上 述 代 码 中, 在 根 LinearLayout 视 图 组 (ViewGroup) 中 包 含 了 5 个 按 钮 (Button), 它 的 子 元 素 是 以 线 性 方 式 水 平 布 局 的 上 述 代 码 的 运 行 效 果 如 图 1-2 所 示 图 1-2 LinearLayout 布 局 效 果 实 例 002: 使 用 相 对 布 局 (RelativeLayout) 来 布 局 屏 幕 源 码 路 径 :daima\002 知 识 点 介 绍 相 对 布 局 是 设 计 用 户 界 面 的 有 力 工 具, 因 为 它 消 除 了 嵌 套 视 图 组 相 对 布 局 是 指 一 个 ViewGroup 以 相 对 位 置 显 示 它 的 子 视 图 (View) 元 素, 一 个 视 图 可 以 指 定 相 对 于 它 的 兄 弟 视 图 的 位 置 ( 如 在 给 定 视 图 的 左 边 或 者 下 面 ) 或 相 对 于 RelativeLayout 的 特 定 区 域 的 位 置 ( 如 底 部 对 齐 或 中 间 偏 左 ) RelativeLayout 允 许 子 元 素 指 定 它 们 相 对 于 其 他 元 素 或 父 元 素 的 位 置 ( 通 过 ID 指 定 ) 所 以 可 以 用 右 对 齐 上 下 对 齐 或 置 于 屏 幕 中 央 的 形 式 来 排 列 两 个 元 素 如 果 第 一 个 元 素 在 屏 幕 的 中 央, 那 么 相 对 于 这 个 元 素 的 其 他 元 素 将 以 屏 幕 中 央 的 相 对 位 置 来 排 列 如 果 使 用 XML 来 指 定 这 个 布 局, 在 定 义 它 之 前, 被 关 联 的 元 素 必 须 定 义 RelativeLayout 结 构 如 图 1-3 所 示 图 1-3 RelativeLayout 结 构 3

Android 开 发 实 例 大 全 具 体 实 现 使 用 Eclipse 创 建 一 个 名 为 002 的 Android 工 程 编 写 布 局 文 件 res/layour/main.xml, 代 码 如 下 所 示 <TextView android:id="@+id/label" android:layout_width="fill_parent" android:text=" 请 输 入 信 息 :" <EditText android:id="@+id/entry" android:layout_width="fill_parent" android:background="@android:drawable/editbox_background" android:layout_below="@id/label" <Button android:id="@+id/ok" android:layout_below="@id/entry" android:layout_alignparentright="true" android:layout_marginleft="10dip" android:text=" 确 定 " <Button android:layout_toleftof="@id/ok" android:layout_aligntop="@id/ok" android:text=" 取 消 " 执 行 后 的 效 果 如 图 1-4 所 示 图 1-4 执 行 效 果 在 上 述 实 例 中, 在 RelativeLayout 视 图 组 中 包 含 了 一 个 TextView 一 个 EditView 和 两 个 Button, 并 且 使 用 了 下 面 的 属 性 代 码 来 设 置 布 局 的 显 示 android:layout_below="@id/label" android:layout_below="@id/entry" android:layout_alignparentright="true" 4

第 1 章 UI 布 局 开 发 实 例 集 锦 android:layout_toleftof="@id/ok" android:layout_aligntop="@id/ok" 在 使 用 相 对 布 局 方 式 时, 正 是 使 用 这 些 类 似 的 属 性 来 定 位 视 图 到 你 想 要 的 位 置 的, 它 们 的 值 是 你 参 照 的 视 图 的 ID 这 些 属 性 的 意 思 很 简 单, 就 是 英 文 单 词 的 直 译, 这 里 就 不 多 做 介 绍 了 知 识 点 介 绍 实 例 003: 使 用 表 格 布 局 (TableLayout) 来 布 局 屏 幕 源 码 路 径 :daima\003 表 格 布 局 (TableLayout) 其 实 是 一 个 ViewGroup 以 表 格 显 示 它 的 子 视 图 (View) 元 素, 即 行 和 列 标 识 一 个 视 图 的 位 置 其 实 Android 的 表 格 布 局 与 HTML 中 的 表 格 布 局 非 常 类 似,TableRow 就 像 HTML 表 格 的 <tr> 标 记 表 格 布 局 通 常 用 于 把 子 元 素 放 入 行 与 列 中, 不 显 示 行 列 或 单 元 格 边 界 线, 但 是 单 元 格 不 能 横 跨 行, 像 HTML 中 一 样 表 格 图 1-5 表 格 布 局 效 果 布 局 效 果 如 图 1-5 所 示 在 使 用 表 格 布 局 时 需 要 了 解 如 下 3 点 android:shrinkcolumns: 对 应 的 方 法 是 setshrinkallcolumns(boolean), 作 用 是 设 置 表 格 的 列 是 否 收 缩 ( 列 编 号 从 0 开 始, 下 同 ), 如 果 有 多 列 则 用 逗 号 隔 开 ( 下 同 ), 如 android:shrinkcolumns="0,1,2", 表 示 表 格 的 第 1 2 3 列 的 内 容 是 收 缩 的 以 适 合 屏 幕, 不 会 挤 出 屏 幕 android:collapsecolumns: 对 应 的 方 法 是 setcolumncollapsed(int,boolean), 作 用 是 设 置 表 格 的 列 是 否 隐 藏 android:stretchcolumns: 对 应 的 方 法 是 setstretchallcolumns(boolean), 作 用 是 设 置 表 格 的 列 是 否 拉 伸 具 体 实 现 使 用 Eclipse 创 建 一 个 名 为 003 的 Android 工 程 编 写 布 局 文 件 res/layour/main.xml, 代 码 如 下 所 示 <TableRow> <Button android:id="@+id/button1" android:text=" 第 一 个 按 钮 " android:layout_column="0" <Button android:id="@+id/button2" 5

Android 开 发 实 例 大 全 android:text=" 第 二 个 按 钮 " android:layout_column="1" </TableRow> <TableRow><!-- row2 --> <Button android:id="@+id/button3" android:text=" 第 三 个 按 钮 " android:layout_column="1" <Button android:id="@+id/button4" android:text=" 第 四 个 按 钮 " android:layout_column="1" </TableRow> <TableRow> <Button android:id="@+id/button5" android:text=" 第 五 个 按 钮 " android:layout_column="2" </TableRow> 执 行 后 的 效 果 如 图 1-6 所 示 图 1-6 执 行 效 果 实 例 004: 使 用 绝 对 布 局 (AbsoluteLayout) 来 布 局 屏 幕 源 码 路 径 :daima\004 知 识 点 介 绍 绝 对 布 局 (AbsoluteLayout) 是 指 一 个 ViewGroup 以 绝 对 方 式 显 示 它 的 子 视 图 (View) 元 素, 6

第 1 章 UI 布 局 开 发 实 例 集 锦 即 以 坐 标 的 方 式 来 定 位 在 屏 幕 上 位 置 这 种 布 局 方 式 很 好 理 解, 在 布 局 文 件 中 编 程 设 置 View 的 坐 标, 从 而 绝 对 地 定 位 AbsoluteLayout 可 以 让 子 元 素 指 定 准 确 的 x 和 y 坐 标 值, 并 显 示 在 屏 幕 上 其 中 坐 标 (0, 0) 为 左 上 角, 当 向 下 或 向 右 移 动 时, 坐 标 值 将 变 大 AbsoluteLayout 没 有 页 边 框, 允 许 元 素 之 间 互 相 重 叠 ( 尽 管 不 推 荐 ) 我 们 通 常 不 推 荐 使 用 AbsoluteLayout, 除 非 有 正 当 理 由 使 用 它, 因 为 它 会 使 界 面 代 码 太 过 刚 性, 以 至 于 在 不 同 的 设 备 上 可 能 不 能 很 好 地 工 作 AbsoluteLayout 效 果 如 图 1-7 所 示 具 体 实 现 图 1-7 AbsoluteLayout 效 果 使 用 Eclipse 创 建 一 个 名 为 004 的 Android 工 程 编 写 布 局 文 件 res/layour/main.xml, 代 码 如 下 所 示 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/absolutelayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/txtintro" android:text=" 使 用 绝 对 布 局 " android:layout_width="fill_parent" android:layout_x="20dip" android:layout_y="20dip"> </TextView> </AbsoluteLayout> 执 行 后 的 效 果 如 图 1-8 所 示 7

Android 开 发 实 例 大 全 图 1-8 执 行 效 果 知 识 点 介 绍 实 例 005: 使 用 标 签 布 局 (TabLayout) 来 布 局 屏 幕 源 码 路 径 :daima\005 标 签 布 局 (TabLayout) 是 一 个 ViewGroup 以 标 签 的 方 式 显 示 它 的 子 视 图 (View) 元 素, 就 像 在 Firefox 中 的 一 个 窗 口 中 显 示 多 个 网 页 一 样 为 了 创 建 一 个 标 签 UI(tabbed UI), 需 要 使 用 TabHost 和 TabWidget TabHost 必 须 是 布 局 的 根 节 点, 它 包 含 显 示 标 签 的 TabWidget 和 显 示 标 签 内 容 的 FrameLayout 具 体 实 现 使 用 Eclipse 创 建 一 个 名 为 005 的 Android 工 程 编 写 布 局 文 件 res/layour/main.xml, 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableRow> <Button android:text=" 7 " <Button android:text=" 8 " <Button android:text=" 9 " <Button android:text=" / " </TableRow> <TableRow> <Button android:text=" 4 " <Button android:text=" 5 " <Button android:text=" 6 " 8

第 1 章 UI 布 局 开 发 实 例 集 锦 <Button android:text=" * " </TableRow> <TableRow> <Button android:text=" 1 " <Button android:text=" 2 " <Button android:text=" 3 " <Button android:text=". " </TableRow> <TableRow> <Button android:text=" 0 " <Button android:text=" = " <Button android:text=" - " <Button android:text=" + " </TableRow> </TableLayout> 执 行 后 将 显 示 一 个 计 算 器 的 效 果, 如 图 1-9 所 示 9

Android 开 发 实 例 大 全 图 1-9 执 行 效 果 知 识 点 介 绍 实 例 006: 使 用 层 布 局 (FrameLayout) 源 码 路 径 :daima\006 层 布 局 (FrameLayout) 是 最 简 单 的 一 种 布 局 方 法, 它 在 屏 幕 上 设 置 一 个 空 白 备 用 区 域, 这 样 就 可 以 在 其 中 填 充 某 一 个 单 一 对 象, 如 一 张 图 片 所 有 的 子 元 素 被 固 定 在 屏 幕 的 左 上 角 但 是 我 们 不 能 为 FrameLayout 中 的 一 个 子 元 素 指 定 一 个 位 置, 后 一 个 子 元 素 将 会 直 接 在 前 一 个 子 元 素 之 上 进 行 覆 盖 填 充, 把 它 们 部 分 或 全 部 挡 住, 除 非 后 一 个 子 元 素 是 透 明 的 具 体 实 现 使 用 Eclipse 创 建 一 个 名 为 006 的 Android 工 程 编 写 布 局 文 件 res/layour/main.xml, 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="big" android:textsize="50pt" <TextView android:text="middle" android:textsize="20pt" <TextView android:text="small" 10

第 1 章 UI 布 局 开 发 实 例 集 锦 android:textsize="10pt" </FrameLayout> 因 为 字 体 多 层 重 叠 所 以 会 发 生 重 影 效 果, 执 行 后 效 果 如 图 1-10 所 示 图 1-10 执 行 效 果 知 识 点 介 绍 实 例 007: 创 建 一 个 桌 面 组 件 Widget 源 码 路 径 :007\src\m\MainActivity.java Widget 是 一 个 桌 面 组 件, 功 能 是 实 现 桌 面 布 局 Android 本 身 已 经 自 带 了 时 钟 音 乐 播 放 器 相 框 和 Google 搜 索 4 个 Widget 程 序, 开 发 人 员 可 以 自 行 开 发 自 己 需 要 的 更 加 美 观 功 能 更 加 丰 富 的 程 序 所 以, 当 我 们 购 买 一 款 Android 手 机 产 品 时, 在 桌 面 上 都 显 示 了 一 些 诸 如 天 气 预 报 日 历 等 经 常 用 到 的 信 息 具 体 实 现 使 用 Eclipse 创 建 一 个 MainActivity 作 为 应 用 程 序 的 入 口, 自 动 生 成 的 主 文 件 是 MainActivity.java, 其 主 要 代 码 如 下 所 示 package m.usewidget; import m.usewidget.r; import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.widget.button; public class MainActivity extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); 11

Android 开 发 实 例 大 全 在 上 述 代 码 中, 关 联 了 一 个 模 板 布 局 文 件 main.xml 这 样, 就 可 以 在 里 面 继 续 添 加 需 要 的 控 件 了, 如 按 钮 列 表 框 进 度 条 和 图 片 等 编 写 布 局 文 件 main.xml, 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > </LinearLayout> 通 过 上 述 代 码, 在 手 机 屏 幕 中 使 用 了 Widget 组 件 执 行 后 不 会 显 示 任 何 信 息, 这 是 因 为 没 有 在 里 面 添 加 任 何 元 素 由 此 可 见,Widget 组 件 只 是 起 了 一 个 容 器 的 作 用, 我 们 只 需 要 把 需 要 显 示 的 屏 幕 元 素 添 加 到 这 个 容 器 里 面 即 可 注 意 : 本 章 接 下 来 的 实 例 代 码, 都 保 存 在 本 实 例 项 目 中, 即 本 章 剩 余 实 例 的 源 码 都 保 存 在 007\src\m 目 录 下 知 识 点 介 绍 实 例 008: 在 屏 幕 中 实 现 一 个 按 钮 效 果 源 码 路 径 :007\src\m Button 控 件 即 按 钮 控 件, 在 日 常 应 用 时, 当 单 击 按 钮 后 会 触 发 一 个 事 件, 这 个 事 件 会 实 现 用 户 需 要 的 功 能 如 用 户 输 入 一 些 信 息, 单 击 确 定 或 取 消 按 钮 后 会 实 现 对 应 的 一 些 操 作 功 能 Android 中 的 Button 控 件 是 最 基 本 的 常 用 控 件, 每 一 个 Button 都 会 使 用 系 统 提 供 的 默 认 背 景 作 为 按 钮 的 默 认 风 格 但 是 这 个 系 统 默 认 的 背 景 可 能 会 因 为 不 同 的 设 备 或 者 同 一 个 平 台 系 统 的 不 同 版 本 而 不 同, 如 Windows XP 和 Windows 2000 的 默 认 UI 差 别 很 大 在 实 际 项 目 中 设 计 界 面 风 格 时, 往 往 需 要 让 使 用 中 的 Button 有 一 个 更 加 漂 亮 的 外 观 风 格 无 论 是 初 学 者 还 是 高 手, 通 常 都 使 用 StateListDrawable( 状 态 图 片 列 表 ) 来 实 现 更 加 漂 亮 的 外 观 风 格, 这 种 理 念 是 根 据 Button 的 不 同 状 态 来 用 自 己 设 计 的 背 景 图 片 替 换 Button 默 认 的 背 景 图 片 的 功 能, 从 而 让 这 个 Button 达 到 想 要 的 设 计 效 果 具 体 实 现 修 改 布 局 文 件 main.xml, 在 里 面 添 加 一 个 TextView 和 一 个 Button, 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" 12

第 1 章 UI 布 局 开 发 实 例 集 锦 android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/show_textview" android:layout_width="fill_parent" android:text="@string/hello" <Button android:id="@+id/click_button" android:text=" 单 击 " </LinearLayout> 在 文 件 mainactivity.java 中, 先 通 过 findviewbyid() 获 取 TextView 文 本 和 Button 按 钮 的 资 源, 然 后 为 Button 按 钮 添 加 事 件 监 听 器 Button.OnClickListener(), 最 后 定 义 处 理 事 件 处 理 程 序 其 主 要 代 码 如 下 所 示 // 获 取 TextView 文 本 和 Button 按 钮 的 资 源 show= (TextView)findViewById(R.id.show_TextView); press=(button)findviewbyid(r.id.click_button); // 为 Button 按 钮 添 加 事 件 监 听 器 Button.OnClickListener() press.setonclicklistener(new Button.OnClickListener(){ @Override public void onclick(view v) { ); // 定 义 事 件 处 理 程 序 press.setonclicklistener(new Button.OnClickListener(){ @Override public void onclick(view v) { // 单 击 按 钮 后 输 出 一 段 文 本 show.settext(" 按 钮 被 单 击 了 一 下 "); ); 执 行 后 首 先 显 示 一 个 按 钮 + 文 本 样 式 的 界 面, 当 单 击 这 是 button 按 钮 后 会 执 行 单 击 事 件, 执 行 定 义 的 事 件 处 理 程 序, 如 图 1-11 所 示 图 1-11 执 行 效 果 13

Android 开 发 实 例 大 全 知 识 点 介 绍 实 例 009: 在 屏 幕 中 显 示 文 字 源 码 路 径 :007\src\m 在 手 机 屏 幕 中 可 以 通 过 文 本 框 控 件 TextView 来 显 示 文 本 使 用 TextView 控 件 的 基 本 步 骤 如 下 所 示 导 入 TextView 包, 具 体 代 码 如 下 所 示 import android.widget.textview; 在 文 件 mainactivity.java 中 声 明 一 个 TextView, 如 下 面 的 代 码 所 示 private TextView mtextview01; 在 文 件 main.xml 中 定 义 一 个 TextView 对 象 TextView01, 如 下 面 的 代 码 所 示 <TextView android:text="textview01" android:id="@+id/textview01" android:layout_x="61px" android:layout_y="69px"> </TextView> 利 用 findviewbyid() 方 法 获 取 main.xml 中 的 TextView, 如 下 面 的 代 码 所 示 mtextview01 = (TextView) findviewbyid(r.id.textview01); 设 置 TextView 标 签 内 容, 如 下 面 的 代 码 所 示 String str_2 = " 欢 迎 来 到 Android 世 界..."; mtextview01.settext(str_2); 设 置 文 本 超 链 接, 如 下 面 的 代 码 所 示 <TextView android:id="@+id/textview02" android:autolink="all" android:text=" 请 访 问 Android 开 发 者 : http://developer.android.com/index.html"> </TextView> 14

第 1 章 UI 布 局 开 发 实 例 集 锦 具 体 实 现 修 改 文 件 mainactivity.java, 在 里 面 分 别 添 加 12 个 TextView 对 象 变 量, 一 个 LinearLayout 对 象 变 量 一 个 整 数 变 量 WC 一 个 LinearLayout.LayoutParams 变 量, 其 主 要 代 码 如 下 所 示 /* 定 义 使 用 的 对 象 */ private LinearLayout mylayout; private LinearLayout.LayoutParams layoutp; private int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private TextView black_tv, blue_tv, cyan_tv, dkgray_tv, gray_tv, green_tv,ltgray_tv, magenta_tv, red_tv, transparent_tv, white_tv, yellow_tv; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); /* 实 例 化 一 个 LinearLayout 布 局 对 象 */ mylayout = new LinearLayout(this); /* 设 置 LinearLayout 的 布 局 为 垂 直 布 局 */ mylayout.setorientation(linearlayout.vertical); /* 设 置 LinearLayout 布 局 的 背 景 图 片 */ mylayout.setbackgroundresource(r.drawable.back); /* 加 载 主 屏 布 局 */ setcontentview(mylayout); /* 实 例 化 一 个 LinearLayout 布 局 参 数, 用 来 添 加 View */ layoutp = new LinearLayout.LayoutParams(WC, WC); /* 构 造 实 例 化 TextView 对 象 */ constructtextview(); /* 把 TextView 添 加 到 LinearLayout 布 局 中 */ addtextview(); /* 设 置 TextView 文 本 颜 色 */ settextviewcolor(); /* 设 置 TextView 文 本 内 容 */ settextviewtext(); /* 设 置 TextView 文 本 内 容 */ public void settextviewtext() { black_tv.settext(" 黑 色 "); blue_tv.settext(" 蓝 色 "); cyan_tv.settext(" 青 绿 色 "); dkgray_tv.settext(" 灰 黑 色 "); gray_tv.settext(" 灰 色 "); green_tv.settext(" 绿 色 "); ltgray_tv.settext(" 浅 灰 色 "); magenta_tv.settext(" 红 紫 色 "); red_tv.settext(" 红 色 "); transparent_tv.settext(" 透 明 "); 15

Android 开 发 实 例 大 全 white_tv.settext(" 白 色 "); yellow_tv.settext(" 黄 色 "); /* 设 置 TextView 文 本 颜 色 */ public void settextviewcolor() { black_tv.settextcolor(color.black); blue_tv.settextcolor(color.blue); dkgray_tv.settextcolor(color.dkgray); gray_tv.settextcolor(color.gray); green_tv.settextcolor(color.green); ltgray_tv.settextcolor(color.ltgray); magenta_tv.settextcolor(color.magenta); red_tv.settextcolor(color.red); transparent_tv.settextcolor(color.transparent); white_tv.settextcolor(color.white); yellow_tv.settextcolor(color.yellow); /* 构 造 实 例 化 TextView 对 象 */ public void constructtextview() { black_tv = new TextView(this); blue_tv = new TextView(this); cyan_tv = new TextView(this); dkgray_tv = new TextView(this); gray_tv = new TextView(this); green_tv = new TextView(this); ltgray_tv = new TextView(this); magenta_tv = new TextView(this); red_tv = new TextView(this); transparent_tv = new TextView(this); white_tv = new TextView(this); yellow_tv = new TextView(this); /* 把 TextView 添 加 到 LinearLayout 布 局 中 */ public void addtextview() { mylayout.addview(black_tv, layoutp); mylayout.addview(blue_tv, layoutp); mylayout.addview(cyan_tv, layoutp); mylayout.addview(dkgray_tv, layoutp); mylayout.addview(gray_tv, layoutp); mylayout.addview(green_tv, layoutp); mylayout.addview(ltgray_tv, layoutp); mylayout.addview(magenta_tv, layoutp); mylayout.addview(red_tv, layoutp); mylayout.addview(transparent_tv, layoutp); mylayout.addview(white_tv, layoutp); mylayout.addview(yellow_tv, layoutp); 16

第 1 章 UI 布 局 开 发 实 例 集 锦 执 行 后 的 效 果 如 图 1-12 所 示 图 1-12 执 行 效 果 知 识 点 介 绍 实 例 010: 在 屏 幕 中 显 示 编 辑 框 源 码 路 径 :007\src\m 在 手 机 屏 幕 中, 可 以 和 网 页 中 一 样 显 示 可 输 入 文 本 信 息 的 文 本 框, 此 功 能 是 通 过 编 辑 框 控 件 EditText 实 现 的 编 辑 框 控 件 EditText 的 用 法 和 TextView 类 似, 它 能 生 成 一 个 可 编 辑 的 文 本 框 具 体 实 现 在 主 窗 口 界 面 中 添 加 一 个 EditText 控 件, 然 后 设 定 其 监 听 器 在 接 收 到 单 击 事 件 时, 程 序 打 开 EditText 的 界 面 定 义 文 件 editview.xml 来 布 局 程 序 打 开 的 EditText 界 面, 具 体 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > // 供 用 户 输 入 值 <EditText android:id="@+id/edit_text" android:layout_width="fill_parent" android:text=" 这 里 可 以 输 入 文 字 " // 用 于 获 取 输 入 值 <Button android:id="@+id/get_edit_view_button" 17

Android 开 发 实 例 大 全 android:text=" 获 取 EditView 的 值 " </LinearLayout> 编 写 事 件 处 理 文 件 EditTextActivity.java, 主 要 代 码 如 下 所 示 public class EditTextActivity extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settitle("edittextactivity"); setcontentview(r.layout.editview); find_and_modify_text_view(); private void find_and_modify_text_view() { Button get_edit_view_button = (Button) findviewbyid(r.id.get_edit_view_button); get_edit_view_button.setonclicklistener(get_edit_view_button_listener); private Button.OnClickListener get_edit_view_button_listener = new Button.OnClickListener() { /** 响 应 代 码, 显 示 EditText 中 的 值 **/ ; public void onclick(view v) { EditText edit_text = (EditText) findviewbyid(r.id.edit_text); CharSequence edit_text_value = edit_text.gettext(); settitle("edittext 的 值 :"+edit_text_value); 执 行 后 先 显 示 默 认 的 文 本 和 输 入 框, 如 图 1-13 所 示 ; 输 入 一 段 文 本 并 单 击 获 取 EditView 的 值 按 钮 后 会 获 取 输 入 的 文 字, 并 显 示 出 输 入 的 文 字, 如 图 1-14 所 示 图 1-13 初 始 效 果 图 1-14 执 行 效 果 实 例 011: 在 屏 幕 中 显 示 复 选 框 源 码 路 径 :007\src\m 18

第 1 章 UI 布 局 开 发 实 例 集 锦 知 识 点 介 绍 在 网 页 中 有 复 选 框 这 一 概 念, 复 选 框 提 供 一 个 制 造 选 择 开 关 的 方 法, 它 包 括 一 个 小 框 和 一 个 标 签 典 型 的 复 选 框 中 有 一 个 小 的 X ( 或 者 它 设 置 的 其 他 类 型 符 号 ) 或 是 空 的, 这 取 决 于 项 目 是 否 被 选 择 在 手 机 屏 幕 中 也 可 以 实 现 复 选 框 的 效 果, 此 功 能 是 通 过 CheckBox 控 件 实 现 的 CheckBox 控 件 能 够 为 用 户 提 供 输 入 信 息, 用 户 可 以 一 次 性 选 择 多 个 选 项 在 Android 中, 使 用 CheckBox 控 件 也 需 要 在 XML 布 局 文 件 中 定 义 具 体 实 现 编 写 布 局 文 件 check_box.xml, 插 入 拥 有 4 个 可 选 项 的 CheckBox 控 件 供 用 户 选 择, 然 后 插 入 一 个 Button 控 件 来 响 应 用 户 的 单 击 事 件, 具 体 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <CheckBox android:id="@+id/plain_cb" android:text="plain" <CheckBox android:id="@+id/serif_cb" android:text="serif" android:typeface="serif" <CheckBox android:id="@+id/bold_cb" android:text="bold" android:textstyle="bold" <CheckBox android:id ="@+id/italic_cb" android:text="italic" android:textstyle="italic" 19

Android 开 发 实 例 大 全 <Button android:id="@+id/get_view_button" android:text=" 获 取 CheckBox 的 值 " </LinearLayout> 编 写 单 击 按 钮 事 件 的 处 理 文 件 CheckBoxActivity.java, 把 用 户 选 中 的 选 项 值 显 示 在 Title 上 面, 主 要 代 码 如 下 所 示 @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settitle("checkboxactivity"); setcontentview(r.layout.check_box); find_and_modify_text_view(); private void find_and_modify_text_view() { plain_cb = (CheckBox) findviewbyid(r.id.plain_cb); serif_cb = (CheckBox) findviewbyid(r.id.serif_cb); italic_cb = (CheckBox) findviewbyid(r.id.italic_cb); bold_cb = (CheckBox) findviewbyid(r.id.bold_cb); Button get_view_button = (Button) findviewbyid(r.id.get_view_button); get_view_button.setonclicklistener(get_view_button_listener); private Button.OnClickListener get_view_button_listener = new Button.OnClickListener() { public void onclick(view v) { String r = ""; if(plain_cb.ischecked()) { r = r + "," + plain_cb.gettext(); if(serif_cb.ischecked()) { r = r + "," + serif_cb.gettext(); if(italic_cb.ischecked()) { r = r + "," + italic_cb.gettext(); if(bold_cb.ischecked()) { r = r + "," + bold_cb.gettext(); settitle("checked: " + r); ; 20

第 1 章 UI 布 局 开 发 实 例 集 锦 执 行 后 先 显 示 4 个 选 项 值 供 用 户 选 择, 如 图 1-15 所 示 ; 用 户 选 择 某 些 选 项 并 单 击 获 取 复 选 框 的 值 按 钮 后, 将 在 屏 幕 顶 端 用 文 本 提 示 已 经 选 择 的 选 项, 如 图 1-16 所 示 图 1-15 初 始 效 果 图 1-16 执 行 效 果 知 识 点 介 绍 实 例 012: 在 屏 幕 中 显 示 单 选 框 源 码 路 径 :007\src\m 在 单 选 框 中 只 能 选 中 一 项 命 令, 单 选 框 允 许 用 户 在 一 组 选 项 中 选 择 其 中 的 一 个 选 项 单 选 框 的 外 观 一 般 是 一 个 空 白 的 圆 形, 在 它 的 旁 边 通 常 有 一 个 文 本 标 签 当 用 户 按 下 标 签 时, 对 应 的 选 择 按 钮 就 会 被 选 上 已 选 上 的 选 择 按 钮 一 般 会 在 圆 圈 内 加 上 一 小 圆 点 单 项 选 择 控 件 RadioGroup 是 和 多 项 选 择 控 件 CheckBox 相 对 应 的, 但 是 它 只 能 供 用 户 选 择 一 个 选 项 具 体 实 现 编 写 布 局 文 件 radio_group.xml, 在 屏 幕 中 插 入 一 个 RadioGroup 控 件, 在 里 面 提 供 4 个 选 项 供 用 户 选 择, 然 后 插 入 一 个 Button 控 件, 用 于 清 除 用 户 选 择 的 选 项, 具 体 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <RadioGroup android:layout_width="fill_parent" android:orientation="vertical" android:checkedbutton="@+id/lunch" android:id="@+id/menu"> 21

Android 开 发 实 例 大 全 <RadioButton android:text="aa" android:id="@+id/breakfast" <RadioButton android:text="bb" android:id="@id/lunch" <RadioButton android:text="cc" android:id="@+id/dinner" <RadioButton android:text="dd" android:id="@+id/all" </RadioGroup> <Button android:text=" 清 除 " android:id="@+id/clear" </LinearLayout> 编 写 事 件 处 理 文 件 RadioGroupActivity.java, 主 要 代 码 如 下 所 示 @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.radio_group); settitle("radiogroupactivity"); mradiogroup = (RadioGroup) findviewbyid(r.id.menu); Button clearbutton = (Button) findviewbyid(r.id.clear); clearbutton.setonclicklistener(this); 当 用 户 单 击 清 除 按 钮 后, 会 使 用 settitle 修 改 Title 值 为 RadioGroupActivity, 然 后 获 取 RadioGroup 对 象 和 按 钮 对 象 执 行 后 先 显 示 4 个 选 项 值 供 用 户 选 择, 如 图 1-17 所 示 ; 用 户 选 择 一 个 选 项 并 单 击 清 除 按 钮 后, 会 清 除 选 择 的 选 项, 如 图 1-18 所 示 图 1-17 初 始 效 果 图 1-18 执 行 效 果 22

第 1 章 UI 布 局 开 发 实 例 集 锦 知 识 点 介 绍 实 例 013: 在 屏 幕 中 显 示 下 拉 列 表 框 源 码 路 径 :007\src\m Spinner 是 类 View 的 一 个 子 类, 在 Android 中 可 以 使 用 下 拉 列 表 控 件 Spinner 实 现 一 个 下 拉 列 表 框 效 果 使 用 下 拉 列 表 框 后, 用 户 不 需 要 输 入 数 据, 只 需 选 择 一 个 选 项 即 可 在 框 中 完 成 数 据 输 入 工 作 Spinner 位 于 android.widget 包 下, 每 次 只 显 示 用 户 选 中 的 元 素, 当 用 户 再 次 单 击 时, 会 弹 出 选 择 列 表 供 用 户 选 择, 而 选 择 列 表 中 的 元 素 同 样 来 自 适 配 器 具 体 实 现 在 主 布 局 文 件 main.xml 中 添 加 Spinner 按 钮, 单 击 此 按 钮 后 会 启 动 新 界 面 SpinnerActivity, 主 要 代 码 如 下 所 示 <Button android:id="@+id/spinner_button" android:text="spinner" 在 MainActivity.java 文 件 中 编 写 按 钮 单 击 事 件 的 处 理 代 码, 具 体 如 下 所 示 private Button.OnClickListener spinner_button_listener = new Button.OnClickListener() { public void onclick(view v) { Intent intent = new Intent(); intent.setclass(mainactivity.this, SpinnerActivity.class); startactivity(intent); ; 在 上 述 代 码 中 启 动 了 SpinnerActivity, 此 SpinnerActivity 可 以 展 示 Spinner 组 件 的 界 面 在 具 体 实 现 上, 先 创 建 了 SpinnerActivity 的 Activity, 然 后 修 改 了 其 oncreate 方 法, 设 置 其 对 应 模 板 为 spinner.xml 在 文 件 SpinnerActivity.java 中 的 对 应 代 码 如 下 所 示 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settitle("spinneractivity"); setcontentview(r.layout.spinner); find_and_modify_view(); 编 写 文 件 下 拉 列 表 框 界 面 的 布 局 文 件 spinner.xml, 在 里 面 添 加 两 个 TextView 控 件 和 两 个 Spinner 控 件, 主 要 代 码 如 下 所 示 23

Android 开 发 实 例 大 全 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:text="spinner_1" <Spinner android:id="@+id/spinner_1" android:layout_width="fill_parent" android:drawselectorontop="false" </LinearLayout> 在 设 置 文 件 AndroidManifest.xml 中 设 置 定 义 的 Spinner 组 件 的 ID 为 spinner_1, 宽 度 占 满 其 父 元 素 LinearLayout 的 宽 度, 高 度 自 适 应, 主 要 代 码 如 下 所 示 <activity android:name="spinneractivity"></activity> 经 过 上 述 操 作 后, 就 可 以 在 屏 幕 中 生 成 一 个 简 单 的 单 选 选 项 界 面, 但 是 在 列 表 中 并 没 有 选 项 值 如 果 要 在 下 拉 列 表 中 显 示 可 供 用 户 选 择 的 选 项 值, 需 要 在 里 面 填 充 一 些 数 据 载 入 列 表 数 据, 首 先 定 义 需 要 载 入 的 数 据, 然 后 在 方 法 oncreate 中 通 过 调 用 find_and_modify_view() 来 载 入 数 据 在 文 件 SpinnerActivity.java 中 实 现 上 述 功 能 的 代 码 如 下 所 示 private static final String[] mcountries = { "China","Russia", "Germany", "Ukraine", "Belarus", "USA" ; private void find_and_modify_view() { spinner_c = (Spinner) findviewbyid(r.id.spinner_1); allcountries = new ArrayList<String>(); for(int i = 0; i < mcountries.length; i++) { allcountries.add(mcountries[i]); aspncountries = new ArrayAdapter<String>(this, android.r.layout.simple_spinner_item, allcountries); aspncountries.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner_c.setadapter(aspncountries); <TextView 通 过 上 述 代 码, 将 定 义 的 mcountries 数 据 载 入 到 了 Spinner 组 件 中 在 文 件 spinner.xml 中 预 定 义 数 据, 即 在 文 件 spinner.xml 的 模 板 中 再 添 加 一 个 Spinner 组 件, 主 要 代 码 如 下 所 示 24

第 1 章 UI 布 局 开 发 实 例 集 锦 android:layout_width="fill_parent" android:text="spinner_2 From arrays xml file" <Spinner android:id="@+id/spinner_2" android:layout_width="fill_parent" android:drawselectorontop="false" 在 文 件 SpinnerActivity.java 中 初 始 化 Spinner 中 的 值, 具 体 代 码 如 下 所 示 spinner_2 = (Spinner) findviewbyid(r.id.spinner_2); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.countries, android.r.layout.simple_spinner_item); adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner_2.setadapter(adapter); 在 上 述 代 码 中, 将 R.array.countries 对 应 值 载 入 到 了 spinner_2 中, 在 R.array.countries 中 对 应 的 值 是 在 文 件 array.xml 中 预 先 定 义 的 文 件 array.xml 的 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Used in Spinner/spinner_2.java --> <string-array name="countries"> <item>china2</item> <item>russia2</item> <item>germany2</item> <item>ukraine2</item> <item>belarus2</item> <item>usa2</item> </string-array> </resources> 通 过 上 述 代 码, 预 定 义 了 一 个 名 为 countries 的 数 组 执 行 后 先 显 示 两 个 下 拉 列 表 表 单, 如 图 1-19 所 示 ; 单 击 一 个 下 拉 列 表 表 单 后 面 的 会 弹 出 一 个 由 Spinner 组 件 实 现 的 下 拉 选 项 框, 如 图 1-20 所 示 ; 选 择 一 个 选 项 后, 选 项 值 会 自 动 出 现 在 输 入 表 单 中, 如 图 1-21 所 示 25

Android 开 发 实 例 大 全 图 1-19 初 始 效 果 图 1-20 显 示 下 拉 选 项 框 图 1-21 选 择 的 值 自 动 出 现 在 表 单 中 实 例 014: 在 屏 幕 中 实 现 自 动 输 入 文 本 效 果 源 码 路 径 :007\src\m 知 识 点 介 绍 在 Android 手 机 屏 幕 中, 可 以 使 用 控 件 AutoCompleteTextView 实 现 自 动 输 入 文 本 功 能 此 控 件 的 主 要 功 能 是 帮 助 用 户 自 动 输 入 数 据 例 如, 当 用 户 输 入 一 个 字 符 后, 能 够 根 据 这 个 字 符 提 示 显 示 出 与 之 相 关 的 数 据 此 应 用 在 搜 索 引 擎 中 比 较 常 见, 例 如, 用 户 在 百 度 中 输 入 关 键 字 android 后, 会 在 下 拉 列 表 中 自 动 显 示 出 相 关 的 关 键 词, 如 图 1-22 所 示 26

第 1 章 UI 布 局 开 发 实 例 集 锦 图 1-22 百 度 的 输 入 提 示 框 在 控 件 AutoCompleteTextView 中 主 要 有 如 下 3 个 常 用 的 方 法 具 体 实 现 clearlistselection(): 功 能 是 清 除 选 中 的 列 表 项 dismissdropdown(): 功 能 是 如 果 存 在 下 拉 菜 单, 关 闭 它 getadapter(): 功 能 是 获 取 适 配 器 修 改 主 布 局 文 件 main.xml, 在 里 面 添 加 一 个 TextView 一 个 AutoCompleteTextView 和 一 个 Button, 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <TextView android:id="@+id/textview_inputshow" android:layout_width="228px" android:layout_height="47px" android:text=" 请 输 入 " android:textsize="25px" android:layout_x="42px" android:layout_y="37px" > </TextView> <AutoCompleteTextView android:id="@+id/autocompletetextview_input" android:layout_width="275px" 27

Android 开 发 实 例 大 全 android:text="" android:textsize="18sp" android:layout_x="23px" android:layout_y="98px" > </AutoCompleteTextView> <Button android:layout_x="127dip" android:text=" 清 空 " android:id="@+id/button_clean" android:layout_y="150dip"> </Button> </AbsoluteLayout> 修 改 文 件 mainactivity.java, 添 加 自 动 完 成 功 能 处 理 事 件 的 代 码, 主 要 代 码 如 下 所 示 /* 定 义 要 使 用 的 类 对 象 */ private String[] normalstring = new String[] { "Android", "Android Blog","Android Market", "Android SDK", "Android AVD","BlackBerry","BlackBerry JDE", "Symbian", "Symbian Carbide", "Java 2ME","Java FX", "Java 2EE", "Java 2SE", "Mobile", "Motorola", "Nokia", "Sun", "Nokia Symbian", "Nokia forum", "WindowsMobile", "Broncho", "Windows XP", "Google", "Google Android ", "Google 浏 览 器 ", "IBM", "MicroSoft", "Java", "C++", "C", "C#", "J#", "VB" ; @SuppressWarnings("unused") private TextView show; private AutoCompleteTextView autotextview; private Button clean; private ArrayAdapter<String> arrayadapter; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); /* 装 入 主 屏 布 局 main.xml */ setcontentview(r.layout.main); /* 从 XML 中 获 取 UI 元 素 对 象 */ show = (TextView) findviewbyid(r.id.textview_inputshow); autotextview = (AutoCompleteTextView) findviewbyid(r.id.autocompletetextview_input); clean = (Button) findviewbyid(r.id.button_clean); /* 实 现 一 个 适 配 器 对 象, 用 来 给 自 动 完 成 输 入 框 添 加 自 动 装 入 的 内 容 */ arrayadapter = new ArrayAdapter<String>(this, android.r.layout.simple_dropdown_item_1line, normalstring); 28

第 1 章 UI 布 局 开 发 实 例 集 锦 /* 给 自 动 完 成 输 入 框 添 加 内 容 适 配 器 */ autotextview.setadapter(arrayadapter); /* 给 清 空 按 钮 添 加 单 击 事 件 处 理 监 听 器 */ clean.setonclicklistener(new Button.OnClickListener() { @Override public void onclick(view v) { /* 清 空 */ ); autotextview.settext(""); 执 行 后 可 以 在 文 本 框 中 输 入 数 据, 输 入 后 会 根 据 预 先 准 备 的 数 据 进 行 提 示, 如 图 1-23 所 示 图 1-23 弹 出 文 本 输 入 提 示 框 实 例 015: 使 用 日 期 选 择 器 控 件 DatePicker 源 码 路 径 :007\src\m 知 识 点 介 绍 日 期 选 择 器 控 件 DatePicker 能 够 为 用 户 提 供 快 速 选 择 日 期 的 方 法 我 们 知 道 日 期 的 格 式 是 年 - 月 - 日, 在 很 多 计 算 机 系 统 和 嵌 入 式 系 统 中 都 为 用 户 提 供 了 日 期 选 择 表 单, 这 样 无 须 我 们 手 动 输 入 一 个 日 期, 只 需 利 用 鼠 标 单 击 就 可 以 完 成 输 入 日 期 的 工 作 控 件 DatePicker 中 的 常 用 方 法 如 下 所 示 setcurrentminute(integer currentminute): 设 置 当 前 时 间 的 分 钟 getcurrentminute(): 获 取 当 前 时 间 的 分 钟 setenabled(boolean enabled): 设 置 当 前 视 图 是 否 可 以 编 辑 setontimechangedlistener(timepicker.ontimechangedlistener ontimechangedlistener): 当 时 间 改 变 时 调 用 具 体 实 现 在 主 布 局 文 件 main.xml 中 添 加 一 个 ID 为 datepicker_button 的 按 钮, 单 击 后 可 以 打 开 DatePicker 日 期 界 面, 主 要 代 码 如 下 所 示 29

Android 开 发 实 例 大 全 <Button android:id="@+id/date_picker_button" android:text="datepicker" 定 义 上 述 按 钮 的 响 应 处 理 事 件, 具 体 代 码 如 下 所 示 private Button.OnClickListener date_picker_button_listener = new Button.OnClickListener() { public void onclick(view v) { Intent intent = new Intent(); intent.setclass(mainactivity.this, DatePickerActivity.class); startactivity(intent); ; 当 单 击 DatePicker 按 钮 后 会 跳 转 到 DatePickerActivity 上 当 创 建 一 个 Activity 组 件 后, 需 要 在 其 oncreate 方 法 中 指 定 需 要 绑 定 的 模 板 文 件 为 date_picker.xml 在 文 件 DatePickerActivity.java 中 编 写 oncreate 的 实 现 代 码, 设 置 默 认 的 开 始 时 间 是 2011 年 5 月 17 日, 主 要 代 码 如 下 所 示 public class DatePickerActivity extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settitle("checkboxactivity"); setcontentview(r.layout.date_picker); DatePicker dp = (DatePicker)this.findViewById(R.id.date_picker); dp.init(2011, 5, 17, null); 在 日 期 界 面 布 局 文 件 date_picker.xml 中 添 加 DatePicker 组 件, 设 置 控 件 DatePicker 的 ID 为 date_picker, 其 宽 度 和 高 度 都 为 自 适 应, 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" > <DatePicker android:id="@+id/date_picker" </LinearLayout> 在 文 件 AndroidManifest.xml 中 添 加 声 明 Activity 的 代 码, 具 体 代 码 如 下 所 示 30

第 1 章 UI 布 局 开 发 实 例 集 锦 <activity android:name="datepickeractivity" 执 行 后 先 显 示 设 置 的 起 始 日 期, 如 图 1-24 所 示 分 别 单 击 月 日 年 上 面 的 后, 将 会 自 动 显 示 更 改 后 的 月 日 年, 如 图 1-25 所 示 和 或 下 面 的 图 1-24 初 始 效 果 图 1-25 日 期 改 变 后 的 效 果 知 识 点 介 绍 实 例 016: 自 动 选 择 一 个 输 入 时 间 源 码 路 径 :007\src\m 既 然 日 期 年 - 月 - 日 格 式 的 日 期 可 以 设 置 成 自 动 输 入, 同 理 时 - 分 格 式 的 时 间 也 可 以 设 置 成 自 动 输 入 的 方 式 在 Android 系 统 中, 可 以 使 用 控 件 TimePicker 实 现 时 间 选 择 器 的 效 果, 其 功 能 和 控 件 DatePicker 的 功 能 类 似, 它 可 以 为 用 户 提 供 快 速 选 择 时 间 的 方 法 控 件 DatePicker 继 承 自 类 FrameLayout, 如 果 要 捕 获 用 户 修 改 日 期 选 择 控 件 中 的 数 据 事 件, 需 要 为 DatePicker 添 加 一 个 OnDateChangedListener 监 听 器 具 体 实 现 在 文 件 main.xml 中 添 加 一 个 Button 按 钮, 单 击 后 会 来 到 时 间 选 择 器 界 面, 主 要 代 码 如 下 所 示 <Button android:id="@+id/time_picker_button" android:text="timepicker" 编 写 单 击 按 钮 响 应 事 件 代 码, 当 单 击 TimePicker 按 钮 后 跳 转 到 TimePickerActivity, 主 要 代 码 如 下 所 示 private Button.OnClickListener time_picker_button_listener = new Button.OnClickListener() { public void onclick(view v) { Intent intent = new Intent(); intent.setclass(mainactivity.this, TimePickerTimePicker.class); startactivity(intent); 31

Android 开 发 实 例 大 全 ; 创 建 一 个 新 Activity, 在 其 oncreate 方 法 中 设 置 其 对 应 的 模 板 文 件 为 time_picker.xml, 然 后 获 取 其 中 的 TimePicker 控 件, 主 要 代 码 如 下 所 示 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settitle("timepickeractivity"); setcontentview(r.layout.time_picker); TimePicker tp = (TimePicker)this.findViewById(R.id.time_picker); tp.setis24hourview(true); 在 文 件 time_picker.xml 中 定 义 控 件 TimePicker, 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" > <TimePicker android:id="@+id/time_picker" </LinearLayout> 执 行 后 先 显 示 设 置 的 起 始 时 间, 单 击 时 间 上 面 的 或 下 面 的 可 以 更 改 时 间 值, 如 图 1-26 所 示 图 1-26 执 行 效 果 实 例 017: 实 现 屏 幕 自 动 滚 动 源 码 路 径 :007\src\m 知 识 点 介 绍 屏 幕 滚 动 功 能 十 分 重 要, 因 为 手 机 屏 幕 的 大 小 有 限, 当 需 要 显 示 很 多 信 息 时, 可 以 通 过 滚 动 来 浏 览 所 有 的 信 息 在 Android 系 统 中, 可 以 使 用 滚 动 视 图 控 件 ScrollView 在 手 机 屏 幕 中 生 成 滚 动 样 式 的 显 示 方 式, 这 样 即 使 内 容 超 出 了 屏 幕 大 小, 也 能 通 过 滚 动 的 方 式 供 用 户 浏 览 32

第 1 章 UI 布 局 开 发 实 例 集 锦 具 体 实 现 使 用 滚 动 视 图 控 件 ScrollView 的 方 法 比 较 简 单, 只 需 在 LinearLayout 外 面 增 加 一 个 ScrollView 标 记 即 可, 使 用 格 式 如 下 所 示 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" > 在 上 述 代 码 中, 将 滚 动 视 图 控 件 ScrollView 放 在 了 LinearLayout 的 外 面, 这 样 当 LinearLayout 中 的 内 容 超 过 屏 幕 大 小 时, 会 实 现 滚 动 浏 览 功 能 程 序 执 行 后 的 效 果 如 图 1-27 所 示 图 1-27 执 行 效 果 实 例 018: 实 现 一 个 进 度 条 效 果 源 码 路 径 :007\src\m 知 识 点 介 绍 在 Android 系 统 中, 进 度 条 控 件 ProgressBar 可 以 用 图 像 化 的 方 式 显 示 某 个 过 程 的 进 度, 这 样 做 的 好 处 是 能 够 更 加 直 观 地 显 示 进 度 进 度 条 在 计 算 机 领 域 非 常 常 见, 如 软 件 安 装 过 程 一 般 都 使 用 进 度 条 (1)XML 的 属 性 android:progressbarstyle: 默 认 进 度 条 样 式 android:progressbarstylehorizontal: 水 平 样 式 (2) 方 法 getmax(): 返 回 这 个 进 度 条 的 范 围 的 上 限 getprogress(): 返 回 进 度 getsecondaryprogress(): 返 回 次 要 进 度 incrementprogressby(int diff): 指 定 增 加 的 进 度 33

Android 开 发 实 例 大 全 34 isindeterminate(): 指 定 进 度 条 是 否 在 不 确 定 模 式 下 setindeterminate(boolean indeterminate): 设 置 不 确 定 模 式 setvisibility(int v): 设 置 该 进 度 条 是 否 可 视 (3) 重 要 事 件 onsizechanged(int w, int h, int oldw, int oldh): 当 进 度 值 改 变 时 引 发 此 事 件 具 体 实 现 在 主 布 局 文 件 main.xml 中 增 加 ProgressBar 按 钮, 对 应 代 码 如 下 所 示 <Button android:id="@+id/progress_bar_button" android:text="progressbar" 单 击 ProgressBar 按 钮 后 启 动 ProgressBarActivity 以 打 开 进 度 条 界 面, 在 文 件 MainActivity.java 中 对 应 的 代 码 如 下 所 示 private Button.OnClickListener progress_bar_button_listener = new Button.OnClickListener() { public void onclick(view v) { Intent intent = new Intent(); intent.setclass(mainactivity.this, ProgressBarActivity.class); startactivity(intent); ; 在 文 件 ProgressBarActivity.java 中 设 置 对 应 的 布 局 文 件 为 Progress_Bar.xml, 主 要 代 码 如 下 所 示 public class ProgressBarActivity extends Activity { CheckBox plain_cb; CheckBox serif_cb; CheckBox italic_cb; CheckBox bold_cb; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settitle("progressbaractivity"); setcontentview(r.layout.progress_bar); 编 写 进 度 条 界 面 的 布 局 文 件 Progress_Bar.xml, 在 里 面 插 入 如 下 两 个 ProgressBar 控 件 第 一 个 : 环 形 进 度 条, 进 度 到 50 第 二 个 : 水 平 进 度 条, 进 度 到 75 文 件 Progress_Bar.xml 的 主 要 代 码 如 下 所 示

第 1 章 UI 布 局 开 发 实 例 集 锦 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" > <TextView android:text=" 圆 形 进 度 条 " <ProgressBar android:id="@+id/progress_bar" <TextView android:text=" 水 平 进 度 条 " <ProgressBar android:id="@+id/progress_horizontal" style="?android:attr/progressbarstylehorizontal" android:layout_width="200dip" android:max="100" android:progress="50" android:secondaryprogress="75" </LinearLayout> 执 行 后 将 显 示 对 应 样 式 的 进 度 条 效 果, 如 图 1-28 所 示 图 1-28 执 行 效 果 实 例 019: 开 发 一 个 评 分 程 序 源 码 路 径 :007\src\m 知 识 点 介 绍 Android 中 的 评 分 组 件 RatingBar 的 功 能 是 为 用 户 提 供 一 个 评 分 操 作 的 模 式 在 日 常 生 活 中 我 们 经 常 见 到 评 分 系 统, 例 如, 当 我 们 在 当 当 网 购 买 一 本 图 书 后, 可 以 对 这 本 图 书 发 表 评 论, 并 对 这 本 图 书 打 分 使 用 RatingBar 控 件 的 基 本 流 程 如 下 所 示 35

Android 开 发 实 例 大 全 在 布 局 文 件 中 定 义 控 件 及 其 属 性, 这 里 主 要 需 要 指 定 的 是 总 星 星 数 量 和 当 前 的 值, 也 就 是 总 级 别 与 当 前 级 别 的 量, 例 如 下 面 的 代 码 <RatingBar android:id="@+id/ratingbar" android:numstars="5" // 总 级 别, 总 分, 星 星 个 数 android:rating="1.5" // 当 前 级 别, 分 数, 星 星 个 数 > </RatingBar> 使 用 RatingBar 控 件 中 的 方 法 实 现 评 分,RatingBar 有 如 下 两 个 比 较 重 要 的 方 法 RatingBar.setRating(flaot rating); // 设 置 评 分 RatingBar.getRating(); // 获 取 评 分 使 用 如 下 事 件 监 听 进 行 处 理, 完 成 评 分 操 作 RatingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener(){ @Override public void onratingchanged(ratingbar ratingbar, float rating, boolean fromuser) { // 要 进 行 的 操 作 ); 具 体 实 现 在 文 件 main.xml 中 插 入 RatingBar 按 钮, 具 体 代 码 如 下 所 示 <Button android:id="@+id/rating_bar_button" android:text="ratingbar" 编 写 单 击 按 钮 的 处 理 事 件 代 码, 当 用 户 单 击 按 钮 后 会 跳 转 到 RatingBarActivty, 对 应 代 码 如 下 所 示 private Button.OnClickListener rating_bar_button_listener = new Button.OnClickListener() { public void onclick(view v) { Intent intent = new Intent(); intent.setclass(mainactivity.this, RatingBarActivity.class); startactivity(intent); ; 为 新 建 的 Activity 指 定 模 板 文 件 为 rating_bar.xml, 在 文 件 中 定 义 一 个 RatingBar 控 件, 36

第 1 章 UI 布 局 开 发 实 例 集 锦 设 置 其 ID 为 rating_bar, 设 定 宽 度 和 高 度 都 是 自 适 应 文 件 rating_bar.xml 的 主 要 代 码 如 下 所 示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" > <TextView android:text="ratingbar" <RatingBar android:id="@+id/rating_bar" ratingbarstylesmall="true" </LinearLayout> 在 文 件 AndroidManifest.xml 中 声 明 RatingBarActivity 权 限, 对 应 代 码 如 下 所 示 <activity android:name="ratingbaractivity" 执 行 后 将 显 示 对 应 样 式 的 评 级 图, 用 户 通 过 点 击 选 择 评 级, 如 图 1-29 所 示 图 1-29 执 行 效 果 知 识 点 介 绍 实 例 020: 在 屏 幕 中 显 示 一 幅 指 定 的 图 片 源 码 路 径 :007\src\m 在 Android 应 用 程 序 中, 可 以 使 用 图 片 视 图 控 件 ImageView 在 屏 幕 中 显 示 一 幅 图 片 具 体 实 现 在 文 件 main.xml 中 插 入 ImageView 按 钮, 具 体 代 码 如 下 所 示 <Button android:id="@+id/image_view_button" android:text="imageview" 37