内 容 简 介 本 书 以 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