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

Similar documents
I

修改版-操作手册.doc

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

第2章 数据类型、常量与变量

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

Microsoft Word - 第3章.doc

《C语言基础入门》课程教学大纲

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

登录、注册功能的测试用例设计.doc

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

教师上报成绩流程图


世华财讯模拟操作手册


0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

生产支援功能 使用说明书(IP-110 篇)

乐视云视频发行平台 操作手册 V1.1

国债回购交易业务指引

全国教师资格认定管理信息系统

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

 编号:

Cybozu Garoon 3 管理员手册

深圳市新亚电子制程股份有限公司

工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录 企 业 基 本 信 息 查 看 企 业 人 员 信 息 查 看 企 业 基 本 信 息 操 作 企 业 简 介 企 业 章

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

四川省农村义务教育学生

自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 ( 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 ( 首 页

一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

微软用户

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

全国艺术科学规划项目

目 录 一 激 活 账 号... 2 二 忘 记 密 码 后 如 何 找 回 密 码?... 3 三 如 何 管 理 学 校 信 息 及 球 队 学 生 教 师 等 信 息... 6 四 如 何 发 布 本 校 校 园 文 化? 五 如 何 向 教 师 发 送 通 知? 六

云信Linux SSH认证代理用户手册

目 录 办 公 OA 介 绍... 3 办 公 OA... 4 一. 收 件 箱 发 布 信 件 查 看 个 人 信 件... 7 二. 公 共 留 言 发 布 公 共 留 言 查 看 公 共 留 言... 9 三. 校 长 荐

Template BR_Rec_2005.dot

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

导 数 和 微 分 的 概 念 导 数 的 几 何 意 义 和 物 理 意 义 函 数 的 可 导 性 与 连 续 性 之 间 的 关 系 平 面 曲 线 的 切 线 和 法 线 导 数 和 微 分 的 四 则 运 算 基 本 初 等 函 数 的 导 数 复 合 函 数 反 函 数 隐 函 数 以

引言

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

操作手册

4 进 入 交 互 区 设 置 的 组 件 管 理, 在 组 件 管 理 中, 教 师 可 以 选 择 课 程 空 间 中 的 所 有 组 件, 并 通 过 点 击 启 用 或 不 启 用 选 定 组 件 在 课 程 空 间 中 的 显 示 5 进 入 工 作 室 管 理 的 工 作 室 首 页,

第 一 部 分 MagiCAD for Revit 安 装 流 程

电信系教学大纲的基本规范

目 录 页 1. 欢 迎 使 用 网 上 预 约 面 谈 访 问 系 统 新 用 户 新 用 户 登 入 帐 户 程 序 启 动 网 上 预 约 面 谈 访 问 帐 户 核 对 帐 户 的 地 址 资 料

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审


目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍 系 统 管 理 员 登 陆 班

<4D F736F F D C4EAB9A4B3CCCBB6CABFCAFDD1A7D7A8D2B5BFCEBFBCCAD4B4F3B8D9D3EBD2AAC7F3>

2006年顺德区高中阶段学校招生录取分数线


标题

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

Excel basics

<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

一、资质申请

<4D F736F F D20B3D6B2D6CFDEB6EEB1EDB8F1D7EED6D52E646F63>

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2

随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。

Microsoft Word - 文件汇编.doc

珠江钢琴股东大会

Microsoft Word - 第7章 图表反转形态.doc

øÕªß∂À≤Ÿ◊˜ ÷≤·

课程类 别


合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件

学位论文文档编辑与提交

证券代码: 证券简称:长城电脑 公告编号:

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业

抗 日 战 争 研 究 年 第 期

上海证券交易所会议纪要

i 1) 系 统 运 作 前 设 定 *1. [2.1 网 页 主 机 名 称 设 定 ] -- 设 定 校 务 系 统 的 主 机 IP 地 址, 以 供 其 他 个 人 电 脑 连 接 及 使 用 该 系 统 *2. [2.3.1 输 入 / 修 改 学 校 资 料 ] -- 输 入 系 统 使

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

中 中 中 中 部 中 岗 位 条 件 历 其 它 历 史 师 地 理 师 生 物 师 体 与 健 康 师 从 事 中 历 史 工 从 事 中 地 理 工 从 事 中 生 物 工 从 事 中 体 与 健 康 工 2. 课 程 与 论 ( 历 史 ); 2. 科 ( 历 史 )

黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅

第二讲 数列

untitled

ETF、分级基金规模、份额变化统计

·岗位设置管理流程

目 录 版 本 更 新 说 明 导 读 读 者 对 象 手 册 内 容 简 介 软 件 简 介 基 本 术 语 技 术 支 持 基 本 流 程 操 作 步 骤... 8

<4D F736F F D20322EC9F3BACBC8CBD4B1D7CAB8F1D7A2B2E1B9DCC0EDB9E6B7B6B8BDB1ED2E646F63>

系统设计文档_样稿管理模块 V1.1_.doc

通用短信平台HTTP接口使用说明V1.0.4

抗 日 战 争 研 究 年 第 期 % & ( # #

附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

!!!!!!!!!!

用节点法和网孔法进行电路分析

2016年南开大学MBA招生信息

业务方案篇

Transcription:

第 2 章 用 户 界 面 设 计 如 何 评 价 一 款 APP 的 好 坏, 用 户 体 验 是 非 常 重 要 的 所 谓 用 户 体 验, 最 直 接 的 感 受 就 是 界 面 的 美 观 与 否, 其 次 才 是 功 能 用 户 界 面 相 当 于 APP 的 门 面, 越 来 越 受 到 人 们 的 重 视 如 何 设 计 能 够 兼 容 不 同 规 格 屏 幕 的 用 户 界 面, 是 本 章 的 重 点 本 章 主 要 对 Android 前 台 手 机 界 面 布 局 方 法 以 及 常 用 组 件 进 行 阐 述 主 要 知 识 点 有 : (1)Android 的 布 局 基 础 知 识 ;(2)Android 界 面 常 用 组 件 ;(3)Android 布 局 方 法 : 布 局 管 理 器 ;(4) 消 息 提 示 ;(5)Handler 消 息 传 递 机 制 2.1 用 户 界 面 基 础 用 户 界 面 (User Interface,UI) 是 通 过 软 件 使 人 ( 用 户 ) 与 硬 件 进 行 信 息 交 流 的 媒 介 通 常, 一 个 友 好 美 观 的 界 面 会 提 升 人 们 对 软 件 的 好 感 因 此 近 些 年 来,UI 交 互 设 计 也 是 移 动 多 媒 体 的 发 展 热 点 网 页 的 用 户 界 面 需 要 考 虑 不 同 浏 览 器 以 及 分 辨 率 的 计 算 机 对 网 页 的 解 析, 而 手 机 端 的 用 户 界 面 同 样 需 要 考 虑 不 同 屏 幕 分 辨 率 尺 寸 和 长 宽 比 对 界 面 的 影 响 如 何 合 理 布 局 界 面 使 之 适 应 不 同 型 号 的 手 机, 避 免 出 现 错 乱 拥 挤 的 现 象, 是 开 发 人 员 设 计 用 户 界 面 时 首 先 要 考 虑 的 为 了 能 利 用 有 限 的 空 间 设 计 出 符 合 人 机 交 互 规 范 的 用 户 界 面, 我 们 首 先 要 了 解 基 于 Android 平 台 的 用 户 界 面 的 基 本 知 识 1. 视 图 View 及 容 器 ViewGroup Android 用 户 界 面 框 架 采 用 MVC(Model-View-Controller) 模 型, 其 中 Model 为 应 用 程 序 的 核 心, 用 于 封 装 交 互 的 数 据 ;Controller 用 于 处 理 用 户 的 输 入 ; 而 View 为 显 示 图 像 等 信 息 的 视 图,View 可 以 说 是 用 户 界 面 的 基 本 组 成 单 位, 代 表 了 屏 幕 中 一 个 矩 形 区 域, 可 以 在 该 区 域 存 储 屏 幕 所 需 显 示 内 容 的 数 据 结 构 View 是 Android 一 个 重 要 的 基 类,Android 应 用 中 所 有 UI 组 件 均 继 承 了 该 类 为 了 更 好 地 实 现 页 面 布 局 以 及 复 用 界 面 中 的 视 图 View, Android 在 View 的 基 础 上, 派 生 了 一 个 子 类 ViewGroup, 作 为 组 件 的 容 器 来 使 用 ViewGroup 本 质 上 也 是 一 个 View, 可 以 当 成 View 来 使 用, 它 作 为 容 器 包 含 的 组 件 可 以 是 View, 也 可 以 是 其 他 ViewGroup 用 户 界 面 可 以 说 是 由 View 及 其 子 类 ViewGroup 组 成 的 视 图 树, 其 组 件 层 次 结 构 如 图 2-1 所 示 2. 用 户 界 面 搭 建 图 2-1 用 户 界 面 视 图 树 Android 用 户 界 面 的 搭 建 分 静 态 和 动 态 两 种 方 式 所 谓 静 态 方 式 即 以 XML 布 局 文 件 来 定 义 用 户 界 面, 通 过 XML 布 局 文 件 中 的 相 关 属 性

Android 应 用 开 发 实 践 教 程 进 行 控 制, 这 也 是 较 为 推 荐 的 一 种 方 式 动 态 方 式 是 指 通 过 Java 代 码 来 开 发 用 户 界 面, 动 态 地 控 制 界 面 中 的 组 件 XML 布 局 文 件 控 制 用 户 界 面 利 用 XML 布 局 文 件 来 控 制 用 户 界 面 是 开 发 人 员 最 常 使 用 的 方 法 XML 文 件 用 来 描 述 用 户 界 面, 并 将 其 保 存 在 资 源 文 件 夹 /res/layout 下 这 种 方 法 极 大 地 简 化 了 界 面 设 计 的 过 程, 使 界 面 视 图 从 Java 代 码 中 分 离 出 来, 将 用 户 界 面 中 静 态 部 分 定 义 在 XML 中, 代 替 了 编 写 代 码, 使 得 程 序 结 构 更 加 清 晰 明 了 使 用 布 局 文 件 描 述 界 面 基 本 步 骤 如 下 : 1 打 开 /res/layout 目 录 下 的 布 局 文 件, 遵 照 XML 编 写 规 范 编 写 用 户 界 面 代 码 保 存 编 写 后 的 布 局 文 件,R.java 将 自 动 注 册 该 布 局 资 源 2 在 Activity 中 设 置 界 面 为 上 述 布 局 文 件 描 述 的 用 户 界 面,Java 代 码 描 述 如 下 : setcontentview(r.layout.< 布 局 文 件 名 >); 例 2.1 开 发 一 个 登 录 / 注 册 界 面 1 创 建 工 程, 命 名 为 LoginDemo, 默 认 包 名 为 com.mialab.logindemo 2 打 开 资 源 文 件 夹 layout 下 的 布 局 文 件 activity_main.xml, 编 写 XML 布 局 文 件 布 局 界 面, 代 码 如 下 所 示 <!-- 采 用 线 性 布 局 的 方 式, 界 面 由 一 个 文 本 组 件 和 两 个 按 钮 组 件 组 成 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/txttips" android:text=" 您 好! 请 登 录! 若 未 注 册 本 软 件, 请 单 击 注 册!" /> <Button android:id="@+id/btnlogin" android:text=" 登 录 " /> <Button android:id="@+id/btnregister" android:text=" 注 册 " /> </LinearLayout> 3 打 开 主 界 面 文 件 MainActivity.java, 由 Java 代 码 设 置 2 中 的 界 面 在 Activity 中 显 示, 代 码 如 下 所 示 <!--Activity 中 设 置 上 述 的 布 局 文 件 为 显 示 视 图 --> protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.xml_layout); 上 述 代 码 运 行 后 应 用 程 序 显 示 界 面 如 图 2-2 所 示 Java 代 码 控 制 用 户 界 面 28

第 2 章 用 户 界 面 设 计 除 了 上 述 利 用 XML 布 局 文 件 描 述 用 户 界 面 以 外,Android 也 提 供 了 利 用 Java 代 码 控 制 界 面 的 方 式, 基 本 步 骤 如 下 1 创 建 布 局 管 理 器, 并 将 其 设 置 为 显 示 界 面 ; 2 创 建 UI 组 件, 并 调 用 相 应 的 方 法 设 置 UI 组 件 属 性 ; 3 调 用 addview( ) 方 法, 将 UI 组 件 添 加 到 布 局 管 理 器 中 图 2-2 XML 布 局 界 面 显 示 效 果 例 2.2 在 例 2.1 基 础 上, 修 改 主 界 面 文 件 MainActivity.java, 采 用 Java 代 码 设 计 如 图 2-2 所 示 用 户 界 面, 代 码 如 下 所 示 protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout layout= new LinearLayout(this); // 创 建 线 性 布 局 容 器 对 象 super.setcontentview(layout); layout.setorientation(linearlayout.vertical); // 设 置 线 性 排 列 方 式 为 垂 直 布 局 final TextView tips=new TextView(this); // 创 建 TextView 控 件 // 设 置 TextView 控 件 显 示 文 本 tips.settext(" 您 好! 请 登 录! 若 未 注 册 本 软 件, 请 单 击 注 册!"); Button btnlogin=new Button(this); // 创 建 按 钮 控 件 btnlogin.settext(" 登 录 "); // 设 置 按 钮 显 示 文 本 btnlogin.setlayoutparams(new ViewGroup.LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); // 设 置 按 钮 大 小 Button btnregister=new Button(this); btnregister.settext(" 注 册 "); btnregister.setlayoutparams(new ViewGroup.LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); // 向 layout 容 器 添 加 文 本 与 按 钮 控 件 layout.addview(tips); layout.addview(btnlogin); layout.addview(btnregister); 由 上 述 代 码 可 以 看 出, 完 全 在 代 码 中 控 制 用 户 界 面, 一 方 面 不 利 于 高 层 次 解 耦, 另 一 方 面 界 面 中 的 控 件 需 要 通 过 new 来 创 建, 控 件 属 性 的 设 置 还 需 要 调 用 相 应 的 方 法, 因 此 代 码 显 得 较 为 臃 肿, 对 程 序 开 发 人 员 来 讲 不 论 是 设 计 还 是 维 护 都 较 为 烦 琐, 因 此, 除 非 必 须, 一 般 不 利 用 Java 代 码 来 控 件 用 户 界 面 XML 布 局 文 件 和 Java 代 码 混 合 控 制 用 户 界 面 考 虑 到 Java 代 码 控 制 用 户 界 面 增 加 了 服 务 器 运 行 的 负 担, 一 般 并 不 推 荐 使 用 此 种 方 式, 而 在 实 际 应 用 中 用 户 界 面 中 某 些 组 件 需 要 根 据 不 同 环 境 动 态 地 生 成, 单 一 的 XML 布 局 文 件 并 不 能 实 现 这 种 效 果, 基 于 这 样 的 情 况, 可 以 采 用 XML 布 局 文 件 和 Java 代 码 混 合 控 制 用 户 界 面 的 方 法 例 2.3 单 击 文 本 按 钮 切 换 图 片 显 示 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 ImageScroll 工 程 ) 1 在 布 局 文 件 main.xml 中 定 义 一 个 线 性 容 器, 并 在 其 中 嵌 套 一 个 水 平 布 局 的 子 线 性 容 器 子 容 器 中 水 平 放 置 两 个 文 本 控 件, 用 于 切 换 图 片, 布 局 代 码 如 下 所 示 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:orientation="vertical" 29

Android 应 用 开 发 实 践 教 程 android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="horizontal" android:layout_margin="10sp" android:layout_gravity="center_horizontal"> <TextView android:id="@+id/txtprev" android:text=" 上 一 张 " android:background="#000" /> <TextView android:id="@+id/txtnext" android:text=" 下 一 张 " /> </LinearLayout> </LinearLayout> 2 利 用 Java 代 码 向 root 容 器 中 添 加 一 个 图 像 控 件 ImageView, 并 初 始 化 显 示 第 一 张 图 片 为 视 图 中 两 个 文 本 控 件 添 加 单 击 监 听 事 件, 用 于 控 制 图 片 的 切 换 显 示, 运 行 后 效 果 如 图 2-3 所 示 主 要 实 现 代 码 如 下 所 示 public class MainActivity extends Activity { int currentimg = 1; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // 获 取 LinearLayout 布 局 容 器 LinearLayout main = (LinearLayout) findviewbyid(r.id.root); // 创 建 ImageView 控 件 final ImageView image = new ImageView(this); // 将 ImageView 控 件 添 加 到 LinearLayout 布 局 容 器 中 main.addview(image); // 获 取 id 为 txtprev 和 txtnext 的 TextView 控 件 final TextView txtprev = (TextView) findviewbyid(r.id.txtprev); final TextView txtnext = (TextView) findviewbyid(r.id.txtnext); // 初 始 化 时 显 示 第 一 张 图 片 image.setimageresource(r.drawable.p1); // 设 置 文 本 控 件 的 单 击 事 件 监 听 txtprev.setonclicklistener(new OnClickListener() { public void onclick(view v) { if (currentimg > 1) { // 获 取 图 片 资 源 ID int resource_id = getresources().getidentifier("p"+(-- currentimg), "drawable", "com.mialab.imagescroll"); Log.i("prev",resource_ID+""); // 改 变 ImageView 里 显 示 的 图 片 image.setimageresource(resource_id); ); txtnext.setonclicklistener(new OnClickListener() { 30

第 2 章 用 户 界 面 设 计 public void onclick(view v) { if (currentimg < 7) { int resource_id = getresources().getidentifier("p"+(++ currentimg), "drawable", "com.mialab.imagescroll"); Log.i("next",resource_ID+""); // 改 变 ImageView 里 显 示 的 图 片 image.setimageresource(resource_id); ); 图 2-3 单 击 文 本 图 片 切 换 显 示 2.2 常 用 控 件 软 件 系 统 一 般 通 过 用 户 界 面 的 文 字 图 片 向 用 户 展 示 信 息, 而 用 户 通 过 控 件 录 入 信 息 反 馈 给 计 算 机 Android 系 统 的 UI 控 件 一 般 分 为 两 种 : 系 统 级 控 件 以 及 自 定 义 控 件 系 统 级 控 件 是 Android 系 统 定 制 好 的 控 件, 用 户 可 以 直 接 使 用, 是 应 用 程 序 开 发 过 程 中 最 基 础 的 组 件 ; 自 定 义 控 件 则 是 在 系 统 级 控 件 的 基 础 上, 用 户 根 据 自 身 的 需 求 扩 展 产 生 的 新 控 件 常 见 的 系 统 级 控 件 有 TextView 和 EditText Button 和 ImageButton, 以 及 RadioButton 和 CheckBox mageview ProgressBar ScrollView ListView GridView AlertDialog Android 系 统 用 户 界 面 通 常 采 用 XML 布 局 文 件 进 行 描 述, 每 个 控 件 均 由 特 定 的 标 签 来 表 示, 通 过 Android 提 供 的 属 性 来 描 述 控 件 特 性, 代 码 如 下 所 示 : < 控 件 标 签 android 属 性 =" 属 性 值 "></ 控 件 标 签 > 其 中,Android 系 统 为 常 见 控 件 提 供 了 一 些 通 用 属 性, 也 针 对 每 个 控 件 提 供 了 一 些 特 有 的 属 性, 如 表 2-1 所 示, 对 这 些 属 性 将 在 下 面 的 章 节 中 进 行 详 细 介 绍 android:id 表 2-1 Android 控 件 通 用 属 性 属 性 名 称 属 性 值 描 述 android:layout_width android:layout_height @+id/< 控 件 ID> wrap_content fill_parent match_parent 标 识 控 件 ID @ 表 示 后 面 的 字 符 串 是 ID 资 源 ;+ 表 示 新 资 源 名 称, 如 果 不 是 新 资 源 则 可 省 略 + 描 述 控 件 的 宽 ( 高 ) 度 wrap_content 表 示 大 小 刚 好 足 够 显 示 当 前 控 件 ;fill_parent(match_parent) 则 表 示 填 满 父 控 件 的 空 白, 继 承 父 控 件 的 大 小 在 Android 2.2 中 推 荐 用 match_parent 代 替 fill_parent android:padding 数 值 描 述 控 件 内 容 与 控 件 边 框 的 距 离 android:margin 数 值 描 述 控 件 之 间 的 距 离 android:text 字 符 串 描 述 控 件 文 本 值 31

Android 应 用 开 发 实 践 教 程 2.2.1 TextView 和 EditText 1. 文 本 框 控 件 TextView TextView 是 一 种 显 示 文 本 信 息 的 控 件, 该 控 件 直 接 继 承 于 View, 从 功 能 上 看, 类 似 于 网 页 中 的 标 签 Label 控 件 TextView 控 件 在 XML 中 的 控 件 标 签 由 <TextView> 表 示, 该 控 件 具 有 丰 富 的 属 性 描 述 其 特 性, 限 于 篇 幅, 本 书 仅 列 出 一 些 常 用 的 属 性, 读 者 有 兴 趣 的 话 可 以 查 阅 Android 的 官 方 API 文 档 进 一 步 学 习 表 2-2 显 示 了 TextView 支 持 的 常 用 属 性 表 2-2 TextView 常 用 属 性 属 性 名 称 android:autolink android:cursorvisible android:ellipsize android:gravity android:lines android:maxlines android:minlines android:linksclickable android:linespacingextra android:password android:phonenumber android:scrollhorizontally android:selectallonfocus android:singleline android:height android:width android:maxwidth android:minwidth 描 述 设 置 文 本 为 可 单 击 的 链 接 可 选 值 为 (none/web/email/phone/map/all) 设 定 光 标 是 否 可 见, 默 认 显 示 设 置 当 文 字 超 出 文 本 框 长 度 时, 控 件 如 何 显 示 文 本 属 性 值 有 : start 省 略 号 显 示 在 开 头 ;middle 省 略 号 显 示 在 中 间 ; marquee 以 跑 马 灯 的 方 式 显 示 ( 动 画 横 向 移 动 ) 设 置 文 本 对 齐 方 式 设 置 文 本 的 行 数 设 置 文 本 的 最 大 显 示 行 数, 与 width 或 者 layout_width 结 合 使 用, 超 出 部 分 自 动 换 行, 超 出 行 数 将 不 显 示 设 置 文 本 的 最 小 行 数 设 置 链 接 是 否 可 单 击 设 置 行 间 距 设 置 文 本 以 密 码 方 式 显 示 设 置 文 本 只 接 受 电 话 号 码 设 置 文 本 超 出 文 本 框 宽 度 时, 是 否 出 现 水 平 滚 动 条 如 果 文 本 是 可 选 择 的, 是 否 让 它 获 得 焦 点 而 选 中 所 有 文 本 设 置 单 行 显 示 当 文 本 不 能 完 全 显 示 时, 超 出 部 分 用 来 代 替 设 置 文 本 区 域 的 高 度, 支 持 度 量 单 位 :px/dp/sp/in/mm 设 置 文 本 区 域 的 宽 度, 支 持 度 量 单 位 :px/dp/sp/in/mm 设 置 文 本 区 域 的 最 大 宽 度 设 置 文 本 区 域 的 最 小 宽 度 2. 编 辑 框 控 件 EditText 编 辑 框 控 件 EditText 是 一 种 继 承 于 TextView 控 件 的 可 编 辑 文 本 框 该 控 件 不 仅 可 以 显 示 文 本 信 息, 还 可 以 接 受 用 户 录 入 的 信 息 EditText 控 件 在 XML 中 的 控 件 标 签 由 <EditText> 表 示, 表 2-3 显 示 了 EditText 对 应 的 属 性 表 2-3 EditText 属 性 属 性 名 称 android:digits android:editable android:inputtype android:hint android:numeric 设 置 允 许 输 入 的 字 符 设 置 是 否 可 编 辑 描 述 设 置 文 本 的 类 型, 用 于 帮 助 输 入 法 显 示 合 适 的 键 盘 类 型 设 置 当 文 本 框 内 容 为 空 时, 默 认 显 示 的 提 示 文 本 设 置 与 文 本 框 关 联 的 数 值 输 入 法 属 性 值 有 : integer 关 联 整 数 输 入 法 signed 允 许 输 入 符 号 的 数 值 输 入 法 decimal 允 许 输 入 小 数 点 的 数 值 输 入 法 32

第 2 章 用 户 界 面 设 计 例 2.4 设 计 一 个 简 单 的 用 户 注 册 界 面 这 里 通 过 该 示 例 来 介 绍 TextView 和 EditText 的 使 用 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 UIViewDemo 工 程 ) 1 创 建 工 程, 命 名 为 UIViewDemo, 默 认 包 名 为 com.mialab. uiviewdemo 2 注 册 界 面 的 布 局, 详 见 UIViewDemo 工 程 中 的 res/layout/ activity_main.xml 上 述 布 局 界 面 显 示 如 图 2-4 所 示, 用 户 可 以 输 入 用 户 名 和 密 图 2-4 用 户 注 册 界 面 (1) 码, 密 码 以 圆 点 替 代 显 示 2.2.2 Button 与 ImageButton Button 是 一 类 按 钮 控 件, 用 户 能 够 通 过 单 击 按 钮 触 发 一 个 单 击 onclick 事 件, 从 而 实 现 某 种 功 能 Button 控 件 在 XML 中 的 控 件 标 签 由 <Button> 表 示, 如 果 为 按 钮 添 加 上 android:background 属 性, 则 为 按 钮 添 加 了 背 景 例 2.5 在 例 2.4 的 基 础 上, 为 注 册 界 面 添 加 两 个 按 钮 : 注 册 和 重 置, 用 以 实 现 注 册 和 重 置 注 册 信 息 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 UIViewDemo 工 程 ) 除 此 以 外, 还 有 一 类 特 殊 的 按 钮 图 片 按 钮 ImageButton, 它 继 承 于 Button, 是 通 过 设 置 src 属 性 显 示 图 像 的 按 钮 的 若 将 上 例 的 提 交 按 钮 以 ImageButton 来 代 替 显 示, 则 代 码 可 改 为 : <ImageButton android:src="@drawable/ok"/> 2.2.3 单 选 按 钮 RadioButton 和 复 选 按 钮 CheckBox RadioButton 和 CheckBox 分 别 表 示 可 以 选 择 单 个 选 项 或 多 个 选 项 的 控 件, 它 们 均 继 承 于 Button 类, 其 与 Button 控 件 相 比 较 除 了 外 观 不 同 外, 还 比 Button 控 件 多 了 一 个 表 示 选 中 的 属 性 android:checked, 该 属 性 可 以 用 于 显 示 被 选 中 的 项 需 要 注 意 的 是 RadioButton 与 CheckBox 不 同, 一 组 单 选 按 钮 中 只 能 有 一 个 被 选 中, 为 了 表 示 这 些 单 选 按 钮 在 一 组 中, 同 组 的 单 选 按 钮 需 要 放 置 在 一 个 单 选 按 钮 组 RadioGroup 容 器 中, 从 而 实 现 单 选 功 能 RadioButton 控 件 在 XML 中 的 控 件 标 签 由 <RadioButton> 表 示, CheckBox 控 件 在 XML 中 的 控 件 标 签 由 <CheckBox> 表 示, RadioGroup 控 件 在 XML 中 的 控 件 标 签 由 <RadioGroup> 表 示 例 2.6 在 例 2.5 注 册 界 面 的 基 础, 利 用 单 选 按 钮 和 复 选 按 钮, 实 现 性 别 和 兴 趣 爱 好 信 息 的 录 入 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 UIViewDemo 工 程 ) 性 别 和 兴 趣 爱 好 相 关 控 件 放 置 在 TableLayout 布 局 容 器 中 性 别 有 男 和 女, 并 只 能 为 其 中 之 一, 因 此 性 别 用 两 个 单 选 按 钮 表 示, 并 放 置 在 一 个 单 选 按 钮 组 容 器 中 兴 趣 爱 好 可 以 多 选, 因 此 选 用 图 2-5 用 户 注 册 界 面 (2) 复 选 按 钮 表 示, 效 果 如 图 2-5 所 示 2.2.4 ImageView ImageView 用 来 显 示 Drawable 对 象 资 源 的 控 件, 继 承 于 View 控 件, 前 文 提 到 的 33

Android 应 用 开 发 实 践 教 程 ImageButton 是 由 它 派 生 的 ImageView 控 件 在 XML 中 的 控 件 标 签 由 <ImageView> 表 示, 表 2-4 显 示 了 ImageView 所 支 持 的 属 性 表 2-4 ImageView 属 性 属 性 名 称 android:adjustviewbounds android:croptopadding android:maxheight android:maxwidth android:scaletype android:src 描 述 设 置 是 否 保 持 宽 高 比 需 要 与 maxwidth MaxHeight 一 起 使 用, 否 则 单 独 使 用 没 有 效 果 设 置 是 否 截 取 指 定 区 域 用 空 白 代 替 设 置 控 件 的 最 大 高 度, 单 独 使 用 无 效, 需 要 与 setadjustviewbounds 一 起 使 用 如 果 要 设 置 图 片 固 定 大 小, 又 要 保 持 图 片 宽 高 比, 则 需 要 进 行 如 下 设 置 : (1) 设 置 setadjustviewbounds 为 true; (2) 设 置 maxwidth maxheight; (3) 设 置 layout_width 和 layout_height 为 wrap_content 设 置 控 件 的 最 大 宽 度 界 面 的 实 现 设 置 图 片 的 缩 放 或 移 动 的 方 式 以 适 应 控 件 的 大 小 设 置 控 件 的 Drawable 资 源 由 此, 对 于 2.1 节 例 2.3 单 击 文 本 按 钮 切 换 图 片 显 示 界 面 的 实 现, 也 可 以 采 用 Java 代 码 控 制 界 面 的 方 式 向 用 户 界 面 添 加 一 个 ImageView 控 件, 当 然 也 可 以 在 布 局 文 件 中 添 加 ImageView 控 件 2.2.5 ProgressBar ProgressBar 是 UI 控 件 中 用 于 显 示 某 个 时 刻 操 作 完 成 的 进 度 控 件 该 控 件 应 随 时 间 操 作 完 成 度 而 实 时 变 化, 从 而 达 到 提 醒 用 户 任 务 进 度 的 目 的 ProgressBar 控 件 在 XML 中 的 控 件 标 签 由 <ProgressBar> 表 示, 通 过 style 属 性 可 以 为 ProgressBar 指 定 显 示 风 格 该 属 性 支 持 以 下 几 种 风 格 : @android:style/widget. ProgressBar.Horizontal: 水 平 进 度 条 @android:style/widget. ProgressBar.Inverse: 圆 形 进 度 条 @android:style/widget. ProgressBar.Large: 大 圆 形 进 度 条 @android:style/widget. ProgressBar.Large.Inverse: 大 圆 形 进 度 条 @android:style/widget. ProgressBar.Small: 小 圆 形 进 度 条 @android:style/widget. ProgressBar.Small.Inverse: 小 圆 形 进 度 条 其 中, 带 有 Inverse 参 数 和 不 带 有 Inverse 参 数 的 style 属 性 区 别 在 于 : 当 进 度 条 控 件 所 在 的 界 面 背 景 颜 色 为 白 色 时, 需 要 使 用 带 有 Inverse 参 数 的 style 属 性, 否 则 进 度 条 将 看 不 见 与 此 同 时, 为 了 更 好 地 控 制 进 度,ProgressBar 支 持 如 表 2-5 所 示 的 属 性 表 2-5 ProgressBar 属 性 属 性 名 称 描 述 android:max android:progress android: progressdrawable android:indeterminate android: indeterminatedrawable android: indeterminateduration 设 置 进 度 条 的 最 大 值 设 置 进 度 条 已 完 成 的 进 度 值 设 置 进 度 条 的 轨 道 对 应 的 Drawable 资 源 设 置 是 否 精 确 显 示 进 度 设 置 不 显 示 进 度 的 进 度 条 的 Drawable 资 源 设 置 不 精 确 显 示 进 度 的 持 续 时 间 34

第 2 章 用 户 界 面 设 计 ProgressBar 还 提 供 了 如 下 方 法 来 动 态 地 控 制 进 度 条 : setprogress(int): 利 用 Java 代 码 设 置 进 度 条 的 完 成 百 分 比 ; incrementprogressby(int): 利 用 Java 代 码 设 置 进 度 条 的 进 度 变 化 int 表 示 变 化 量, 其 为 正 数 表 示 增 加, 为 负 数 表 示 减 少 例 2.7 设 置 进 度 条 显 示 工 作 进 度 模 拟 程 序 运 行 工 作, 利 用 进 度 条 实 时 地 显 示 工 作 完 成 的 进 度, 如 图 2-6 所 示 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 ProgressBarDemo 工 程 ) 1 创 建 工 程, 命 名 为 ProgressBarDemo, 默 认 包 名 为 package com.mialab.progressbardemo 图 2-6 进 度 条 2 布 局 界 面 用 户 界 面 只 有 两 个 控 件 : 一 个 文 本 框 用 于 显 示 完 成 的 进 度 数 值 和 一 个 线 条 型 进 度 条 布 局 代 码 如 下 所 示 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="20dp" > <TextView android:id="@+id/txttask" android:text="" /> <ProgressBar android:id="@+id/pb01" style="@android:style/widget.progressbar.horizontal" android:max="1000" /> </LinearLayout> 3 实 现 进 度 条 功 能 本 例 利 用 Timer 模 拟 工 作 的 展 开, 每 间 隔 1 秒, 完 成 一 次 工 作, 同 时 进 度 条 移 动 100 个 单 位 由 于 进 度 条 设 置 最 大 值 为 1000, 因 此 10 秒 后, 将 走 完 整 个 进 度 条 代 码 如 下 所 示 public class MainActivity extends Activity { ProgressBar pg; TextView txt; Timer timer; int status=0; Handler handler=new Handler(){ public void handlemessage(message msg) { if (msg.what == 0x123) { txt.settext(integer.tostring(status)); pg.setprogress(status); if(status==1000) timer.cancel(); ; protected void oncreate(bundle savedinstancestate) { 35

Android 应 用 开 发 实 践 教 程 super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); pg=(progressbar)findviewbyid(r.id.pb01); txt=(textview)findviewbyid(r.id.txttask); timer=new Timer(); timer.schedule(new TimerTask() { public void run() { status+=100; handler.sendemptymessage(0x123);, 0, 1000); 图 2-7 自 定 义 进 度 条 上 面 的 例 子 中, 使 用 了 系 统 定 义 的 线 条 型 进 度 条, 然 而 对 于 用 户 界 面 来 说, 这 样 的 界 面 似 乎 不 够 美 观 Android 为 了 使 进 度 条 能 够 更 好 地 匹 配 用 户 界 面, 提 供 了 自 定 义 进 度 条 的 功 能 因 此 可 以 修 改 上 面 的 进 度 条 控 件, 使 其 样 式 如 图 2-7 所 示 进 度 条 的 布 局 代 码 修 改 如 下 <ProgressBar android:id="@+id/pb01" style="@style/mybar" android:layout_width="fill_parent" android:max="1000" android:progressdrawable="@drawable/stackstyle" /> 打 开 资 源 文 件 夹 /values/styles.xml, 添 加 自 定 义 进 度 条 样 式, 代 码 如 下 所 示 <style name="mybar" parent="@android:style/widget.seekbar"> <item name="android:indeterminateonly">false</item> <item name="android:progressdrawable"> @android:drawable/progress_horizontal</item> <item name="android:indeterminatedrawable"> @android:drawable/progress_horizontal</item> <item name="android:minheight">26dip</item> <item name="android:maxheight">26dip</item> </style> 进 度 条 轨 道 样 式 为 @drawable/stackstyle, 因 此 在 资 源 文 件 夹 /drawable-mdpi 下 创 建 样 式 文 件 stackstyle.xml, 代 码 如 下 所 示 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" android:drawable="@drawable/track" /> <item android:id="@android:id/progress" android:drawable="@drawable/ok" /> </layer-list> 2.2.6 ScrollView ScrollView 是 为 普 通 控 件 添 加 滚 动 条 的 控 件 该 控 件 每 次 只 能 作 用 于 一 个 普 通 控 件 以 控 36

第 2 章 用 户 界 面 设 计 制 其 滚 动 ScrollView 控 件 在 XML 中 的 控 件 标 签 由 <ScrollView> 表 示 该 滚 动 条 是 一 个 垂 直 滚 动 条, 与 之 相 反,Android 还 提 供 一 类 水 平 滚 动 条 控 件 HorizontalScrollView, 其 使 用 方 法 与 ScrollView 相 同 例 2.8 实 现 垂 直 滚 动 条 视 图 功 能 当 用 户 界 面 显 示 Android 起 源 文 本 时, 由 于 内 容 过 多, 屏 幕 无 法 完 全 显 示, 为 此 添 加 垂 直 滚 图 2-8 滚 动 条 动 条, 使 其 能 滚 动 查 看 全 文, 如 图 2-8 所 示 具 体 实 现 步 骤 如 下 1 创 建 工 程, 命 名 为 ScrollViewDemo, 默 认 包 名 为 com.mialab. scrollviewdemo 2 布 局 界 面 布 局 文 件 中, 通 过 文 本 控 件 嵌 套 在 <ScrollView> 内, 实 现 了 垂 直 滚 动 条 来 控 制 文 本 的 显 示 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 ScrollViewDemo 工 程 ) 2.2.7 ListView ListView 是 手 机 中 使 用 非 常 频 繁 的 一 类 控 件, 它 以 垂 直 的 方 式 显 示 列 表 项, 使 显 示 信 息 更 加 清 晰 明 了 Android 为 ListView 提 供 了 多 种 属 性, 如 表 2-6 所 示 android:choicemode android:drawselectorontop android:listselector android:divider android:dividerheight 属 性 名 称 表 2-6 ListView 属 性 设 置 是 否 允 许 多 选 描 述 设 置 是 否 允 许 选 中 的 项 显 示 在 上 方 为 突 出 显 示 被 选 中 项, 设 置 在 其 上 绘 制 的 Draw 资 源 设 置 列 表 项 之 间 的 分 隔 条 设 置 分 隔 条 的 高 度 android:entries 设 置 列 表 项 的 信 息 ( 数 组 资 源 ) android:footerdividersenabled android:headerdividersenabled 设 置 是 否 在 footer 项 前 绘 制 分 隔 条 设 置 是 否 在 header 项 后 绘 制 分 隔 条 例 2.9 实 现 静 态 显 示 用 户 列 表 信 息 功 能 具 体 步 骤 如 下 1 创 建 工 程, 命 名 为 ListViewDemo, 默 认 包 名 为 com.mialab.listviewdemo 2 创 建 布 局 文 件 array_main.xml 本 例 界 面 较 为 简 单, 只 有 一 个 ListView 控 件 通 常, 列 表 项 的 信 息 保 持 静 态 不 变 的 时 候 使 用 entries 属 性 加 载 列 表 项, 代 码 如 下 所 示 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/listuser" android:layout_width="fill_parent" android:divider="#eee" android:dividerheight="2dp" android:headerdividersenabled="false" android:entries="@array/user" android:listselector="#666"/> </LinearLayout> entries 属 性 描 述 了 该 列 表 项 数 据 存 放 在 资 源 文 件 /values/array.xml 中 的 数 组 资 源, 代 码 如 下 所 示 <resources> <string-array name="user"> 37

Android 应 用 开 发 实 践 教 程 <item> 陈 诺 行 </item> <item> 平 书 庭 </item> <item> 邹 宛 佳 </item> <item> 许 诺 </item> </string-array> </resources> 至 此, 运 行 项 目 工 程, 用 户 界 面 显 示 如 图 2-9 所 示 效 果 然 而, 往 往 绝 大 多 数 情 况 下 列 表 项 的 数 据 会 随 着 时 间 用 户 操 作 等 不 同 的 环 境 而 变 化, 这 时 需 要 动 态 获 取 列 表 项 数 据, 再 将 其 填 充 进 列 表 项 控 件 为 此,Android 引 进 了 一 个 适 配 器 接 口 Adapter, 通 过 该 接 口 及 其 实 现 类 实 现 动 态 加 载 ListView 图 2-9 创 建 简 单 的 ListView Adapter 提 供 4 个 实 现 类 :ArrayAdapter SimpleAdapter SimpleCursorAdapter 以 及 BaseAdapter ArrayAdapter ArrayAdapter 是 最 简 单 易 用 的 Adapter, 通 常 由 数 组 或 List 集 合 表 示 列 表 项 数 据 源, 将 其 绑 定 给 ListView, 从 而 以 列 表 项 形 式 显 示 在 界 面 上 例 2.10 利 用 ArrayAdapter 实 现 例 2.9 所 要 求 的 功 能 具 体 步 骤 如 下 1 界 面 布 局 修 改 例 2.9 的 布 局 文 件, 去 掉 entries 属 性 2 创 建 Activity 实 现 类 文 件 ArrayAdapterActivity.java Java 代 码 通 过 设 置 适 配 器, 将 数 据 绑 定 到 ListView 代 码 如 下 所 示 protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout. array_main); ListView list = (ListView) findviewbyid(r.id.listuser); // 定 义 一 个 用 户 数 组 作 为 数 据 源 String[] arr = { " 陈 诺 行 ", " 平 书 庭 ", " 邹 宛 佳 "," 许 诺 "; ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, R.layout.item, arr); // 将 数 组 arr 封 装 到 适 配 器 ArrayAdapter list.setadapter(adapter); // 为 ListView 设 置 Adapter 上 述 代 码 中 有 一 条 关 键 语 句 : ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item, arr); 该 语 句 表 明, 创 建 适 配 器 ArrayAdapter 的 时 候 必 须 为 适 配 器 指 定 三 个 参 数, 依 次 是 : Context 资 源 ID 数 组 或 List 此 处 资 源 ID 代 表 的 是 一 个 布 局 文 件, 该 布 局 包 含 一 个 TextView 组 件 将 作 为 列 表 项 组 件, 每 个 列 表 项 组 件 的 描 述 由 布 局 文 件 来 完 成, 因 此 在 layout 目 录 下 的 item.xml 文 件 中, 包 含 对 TextView 组 件 的 定 义, 代 码 如 下 所 示 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textview" android:textsize="24dp" android:padding="10px"/> 从 上 面 的 例 子 可 看 出, 使 用 ArrayAdatper 实 现 ListView 可 以 动 态 加 载 列 表 项 数 据 38

第 2 章 用 户 界 面 设 计 SimpleAdapter SimpleAdapter 是 在 ArrayAdapter 的 基 础 上, 能 够 更 丰 富 地 显 示 列 表 项 信 息 的 一 种 适 配 器, 列 表 的 每 一 项 可 以 包 含 更 多 的 内 容, 通 过 配 置 文 件 布 局, 界 面 样 式 也 更 多 样 化 例 2.11 利 用 SimpleAdapter 实 现 丰 富 的 用 户 列 表 显 示 具 体 步 骤 如 下 1 在 例 2.10 创 建 的 工 程 下, 布 局 界 面 保 持 不 变 2 创 建 Activity 实 现 类 文 件 SimpleAdapter Activity.java 利 用 SimpleAdapter 可 以 实 现 如 图 2-10 图 2-10 利 用 SimpleAdapter 创 建 ListView 所 示 列 表 显 示 布 局 文 件 保 持 不 变, 在 Activity 中 实 现 数 据 绑 定, 代 码 如 下 所 示 public class SimpleAdapterActivity extends Activity { private String[] names = new String[]{ " 陈 诺 行 ", " 平 书 庭 ", " 邹 宛 佳 "," 许 诺 "; private String[] desc = new String[]{ " 我 今 年 2 岁 啦, 谢 谢 大 家 支 持 ", " 我 才 1 个 月 啦, 请 多 关 照 ", " 我 今 年 3 岁 啦, 谢 谢 大 家 支 持 ", " 我 今 年 4 岁 啦, 请 多 支 持 "; private int[] icons = new int[]{ R.drawable.img1, R.drawable.img1, R.drawable.img1, R.drawable.img2; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.array_main); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < names.length; i++) { Map<String, Object> item = new HashMap<String, Object>(); item.put("image", icons[i]); item.put("name", names[i]); item.put("desc", desc[i]); list.add(item); SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.simpleitem, new String[] { "image", "name", "desc", new int[] { R.id.photo, R.id.name, R.id.desc ); ListView lv = (ListView) findviewbyid(r.id.listuser); lv.setadapter(adapter); 上 述 代 码 中 有 一 条 关 键 语 句 : SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.simpleitem, new String[] { "image", "name", "desc", new int[] { R.id.photo, R.id.name, R.id.desc ); 由 此 创 建 SimpleAdapter 对 象 需 要 以 下 5 个 参 数 第 1 个 参 数 :Context; 第 2 个 参 数 : 列 表 的 数 据 源 ; 第 3 个 参 数 : 列 表 项 的 界 面 布 局 ID; 第 4 个 参 数 :String 数 组, 该 参 数 决 定 数 据 集 中 哪 些 key 对 应 的 value 来 生 成 列 表 项 ; 第 5 个 参 数 : 整 型 数 组, 描 述 需 要 填 充 哪 些 控 件 第 3 个 参 数 用 于 描 述 列 表 项 的 布 局 文 件 ID, 创 建 列 表 项 的 布 局 文 件, 命 名 为 39

Android 应 用 开 发 实 践 教 程 simpleitem.xml, 代 码 如 下 所 示 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" > <ImageView android:id="@+id/photo" android:paddingleft="10dp"/> <RelativeLayout > <TextView android:id="@+id/name" android:textsize="20dp" android:textcolor="#3f48cc" android:paddingleft="10dp" android:layout_alignparenttop="true"/> <TextView android:id="@+id/desc" android:textsize="14dp" android:paddingleft="10dp" android:layout_below="@id/name" android:layout_alignleft="@id/name"/> <ImageView android:id="@+id/aorrow" android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/arrow" android:layout_centervertical="true" android:layout_alignparentright="true" /> </RelativeLayout> </LinearLayout> 从 上 述 例 子 可 以 发 现,SimpleAdapter 对 于 列 表 项 内 容 的 实 现 上 更 为 丰 富 灵 活 SimpleCursorAdapter 与 SimpleAdapter 类 似, 只 是 用 于 封 装 的 数 据 不 同,SimpleCursorAdapter 封 装 的 是 Cursor 提 供 的 数 据 BaseAdapter BaseAdapter 通 常 用 于 被 扩 展, 扩 展 的 BaseAdapter 可 以 自 定 义 适 配 器, 实 现 对 各 列 表 项 进 行 最 大 限 度 的 定 制 例 2.12 利 用 BaseAdapter 实 现 灵 活 的 用 户 列 表 显 示 步 骤 如 下 1 在 例 2.10 创 建 的 工 程 下, 布 局 界 面 保 持 不 变 2 创 建 Activity 实 现 类 文 件 BaseAdapterActivity.java 利 用 BaseAdapter 可 以 实 现 如 图 2-11 所 示 列 表 显 示 图 2-11 BaseAdapter 显 示 ListView 布 局 文 件 保 持 不 变, 在 Activity 中 实 现 数 据 绑 定, 代 码 如 下 所 示 public class BaseAdapterActivity extends Activity { private String[] names = new String[]{ " 陈 诺 行 ", " 平 书 庭 ", " 邹 宛 佳 "," 许 诺 "; private String[] descs = new String[]{ " 我 今 年 2 岁 啦, 谢 谢 大 家 支 持 ", " 我 才 1 个 月 啦, 请 多 关 照 ", " 我 今 年 3 岁 啦, 谢 谢 大 家 支 持 ", " 我 今 年 4 岁 啦, 请 多 支 持 "; private int[] icons = new int[]{ R.drawable.img1, R.drawable.img1, 40

第 2 章 用 户 界 面 设 计 R.drawable.img1, R.drawable.img2; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.array_main); BaseAdapter adp=new BaseAdapter() { public View getview(int position, View view, ViewGroup viewgroup) { LinearLayout out = new LinearLayout(BaseAdapterActivity.this); out.setorientation(0); ImageView image = new ImageView(BaseAdapterActivity.this); image.setimageresource(icons[position]); LinearLayout in = new LinearLayout(BaseAdapterActivity.this); in.setorientation(1); in.setpadding(10, 0, 0, 0); TextView name = new TextView(BaseAdapterActivity.this); name.settext(names[position]); name.settextsize(20); name.settextcolor(color.rgb(63, 72, 204)); TextView desc = new TextView(BaseAdapterActivity.this); desc.settextsize(14); desc.settext(descs[position]); out.addview(image); out.addview(in); in.addview(name); in.addview(desc); return out; public long getitemid(int position) { return position; public Object getitem(int position) { return null; public int getcount() { return 4; ; ListView lv = (ListView) findviewbyid(r.id.listuser); lv.setadapter(adp); 上 述 代 码 显 示, 创 建 BaseAdapter 对 象, 需 要 重 写 如 下 4 个 方 法 getcount( ): 返 回 列 表 项 的 数 目 getitem(int position): 返 回 值 决 定 第 position+1 项 的 列 表 项 内 容 getitemid(int position): 获 取 第 position 处 列 表 项 的 ID getview(int position, View convertview, ViewGroup parent): 返 回 值 决 定 第 position 处 的 列 表 项 组 件, 即 第 position 处 的 列 表 项 视 图 界 面 说 明 : 例 2.10 例 2.11 例 2.12 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 ListViewDemo 工 程, 将 ListView Demo 工 程 安 装 到 手 机 模 拟 器 上 后, 在 APPs 显 示 界 面 将 会 产 生 ArrayAdapter_Demo SimpleAdapter_Demo BaseAdapter_Demo 三 个 应 用 的 启 动 图 标, 单 击 图 标 即 可 运 行 相 应 的 程 序 41

Android 应 用 开 发 实 践 教 程 2.2.8 GridView GridView 是 以 网 格 的 方 式 显 示 信 息 的 控 件, 它 的 使 用 与 ListView 类 似, 差 别 在 于 表 现 形 式 不 同,ListView 是 一 列 多 行 显 示, 而 GridView 是 多 行 多 列 显 示 GridView 控 件 在 XML 中 的 控 件 标 签 由 <GridView> 表 示, 其 支 持 的 属 性 如 表 2-7 所 示 表 2-7 GridView 属 性 属 性 名 称 android:columnwidth android:horizontalspacing android:numcolumns android:stretchmode android:verticalspacing 设 置 网 格 列 宽 度 设 置 列 与 列 之 间 的 距 离 设 置 列 数 设 置 拉 伸 模 式 设 置 行 与 行 之 间 的 距 离 描 述 例 2.13 实 现 图 书 章 节 显 示 功 能 采 用 GridView 以 网 格 方 式 显 示 图 书 的 章 节, 如 图 2-12 所 示 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 GridViewDemo 工 程 ) 2.2.9 AlertDialog 图 2-12 图 书 章 节 显 示 AlertDialog 是 一 款 功 能 强 大 的 对 话 框 控 件, 可 以 显 示 标 题 按 钮 ( 最 多 3 个 ) 可 选 择 的 列 表 项 或 者 一 个 普 通 的 布 局 视 图 Android 将 该 控 件 划 分 成 4 个 区 域 : 图 标 标 题 内 容 和 按 钮, 通 过 分 区 域 控 制 对 话 框 的 内 容, 使 得 界 面 灵 活 多 变 为 了 能 够 灵 活 定 制 对 话 框,Android 提 供 了 如 下 6 种 方 法 来 设 置 对 话 框 的 内 容 setmessage: 设 置 对 话 框 内 容 为 普 通 文 本 setitems: 设 置 对 话 框 内 容 为 简 单 列 表 项 setsinglechoiceitems: 设 置 对 话 框 内 容 为 单 选 列 表 项 setmultichoiceitems: 设 置 对 话 框 内 容 为 多 选 列 表 项 setadapter: 设 置 对 话 框 内 容 为 自 定 义 列 表 项 setview: 设 置 对 话 框 内 容 为 自 定 义 View 例 2.14 在 用 户 注 册 程 序 UIViewDemo 例 子 的 基 础 上, 添 加 弹 出 提 示 对 话 框 的 功 能, 如 图 2-13 所 示 注 意 到, 在 用 户 注 册 界 面 中, 添 加 了 两 个 控 件 一 个 是 复 选 按 钮, 用 于 显 示 用 户 是 否 同 意 注 册 声 明 另 一 个 是 文 本 框, 显 示 的 文 本 是 是 否 同 意 注 册 声 明, 单 击 文 本 框 中 的 文 本 是 否 同 意 注 册 声 明, 将 弹 出 提 示 框, 如 图 2-14 所 示 提 示 框 有 两 个 按 钮, 单 击 取 消 按 钮, 则 复 选 按 钮 呈 未 选 中 状 态, 表 示 不 同 意 注 册 声 明 ; 单 击 确 定 按 钮, 则 复 选 按 钮 呈 选 中 状 态, 表 示 同 意 注 册 声 明 实 现 弹 出 提 示 框 主 要 分 为 3 个 步 骤 :1 首 先 创 建 AlertDialog 的 构 造 器 dialog;2 通 过 调 用 相 应 的 方 法 构 造 提 示 对 话 框,setTitle( ) 用 于 设 置 提 示 框 标 题 文 本,setIcon 用 于 设 置 提 示 框 标 题 Icon,setView( ) 用 于 设 置 自 定 义 内 容 区 域,setPositiveButton( ) 和 setnegativebutton( ) 分 别 用 于 设 置 确 定 和 取 消 按 钮 的 单 击 操 作, 实 现 是 否 同 意 注 册 声 明 ; 最 后 实 现 提 示 对 话 框 的 弹 出 显 示 42

第 2 章 用 户 界 面 设 计 图 2-13 带 提 示 框 的 用 户 注 册 界 面 图 2-14 提 示 框 ( 详 见 教 学 资 源 包 code 文 件 夹 下 第 2 章 AlertDialogDemo 工 程 ) 2.3 界 面 布 局 界 面 布 局 (Layout) 是 用 户 界 面 结 构 的 描 述, 定 义 了 界 面 中 所 有 的 元 素 结 构 和 相 互 关 系 与 大 多 数 软 件 的 布 局 一 样, 界 面 布 局 会 受 制 于 硬 件 的 影 响, 而 出 现 排 版 错 乱 的 问 题 而 手 机 的 界 面 布 局 更 为 复 杂, 除 了 手 机 的 像 素 尺 寸 和 纵 横 比 不 同 以 外, 甚 至 手 机 的 重 力 感 应 也 会 使 得 应 用 程 序 运 行 时 改 变 屏 幕 的 方 向 ( 纵 向 或 横 向 ), 因 此, 手 机 界 面 布 局 希 望 寻 求 某 种 途 径 能 开 发 出 满 足 需 求 兼 容 各 种 手 机 的 用 户 界 面 为 了 让 上 述 提 到 的 UI 控 件 在 用 户 界 面 中 有 序 地 排 列, 并 不 受 手 机 屏 幕 尺 寸 分 辨 率 等 影 响,Android 提 供 了 6 种 布 局 管 理 器, 通 过 布 局 管 理 器 来 定 位 控 件 用 户 可 以 根 据 需 要 使 用 一 种 布 局 方 式, 也 可 以 使 用 多 种 布 局 方 式,6 种 布 局 管 理 器 之 间 可 以 相 互 嵌 套 布 局 管 理 器 可 以 包 含 UI 组 件, 也 可 以 包 含 其 他 布 局 管 理 器, 因 此, 可 以 将 其 看 成 一 个 ViewGroup 对 象, 对 于 组 件 容 器 来 说, 有 两 个 特 别 的 通 用 属 性, 可 以 控 制 容 器 中 的 子 元 素 在 容 器 中 的 位 置, 这 两 个 属 性 的 具 体 描 述 如 表 2-8 所 示 android:layout_gravity android: layout_weight 属 性 名 称 表 2-8 组 件 容 器 的 2 个 特 别 的 通 用 属 性 下 面 我 们 将 依 次 介 绍 这 6 种 布 局 管 理 器 设 置 容 器 中 子 元 素 对 齐 方 式 设 置 容 器 中 子 元 素 所 占 的 权 重 描 述 2.3.1 线 性 布 局 及 android:layout_weight 属 性 设 置 线 性 布 局 LinearLayout 是 Android 系 统 中 最 基 础 的 一 种 布 局 采 用 自 上 而 下 或 者 从 左 往 右 的 方 式 将 一 个 元 素 接 着 一 个 元 素 排 列, 当 排 列 的 元 素 超 出 屏 幕 范 围 时, 超 出 的 部 分 将 做 隐 藏 处 理 表 2-9 列 出 了 LinearLayout 支 持 的 属 性 属 性 名 称 android:baselinealigned android:divider android:gravity 表 2-9 LinearLayout 属 性 描 述 设 置 为 false, 将 会 阻 止 该 布 局 管 理 器 与 它 的 子 元 素 的 基 线 对 齐 设 置 垂 直 布 局 时 按 钮 之 间 的 分 隔 条 设 置 对 齐 方 式, 该 属 性 支 持 对 齐 的 方 式 有 top bottom left right center_vertical fill_vertical center_horizontal fill_horizontal center fill clip_vertical 和 clip_horizontal 可 以 只 有 一 种 对 齐 方 式, 也 可 以 有 多 种 对 齐 方 式 组 合 如 top left 表 示 左 上 对 齐 android:orientation 设 置 排 列 方 式, 有 两 种 horizontal( 水 平 排 列 ) vertical( 垂 直 排 列 ) 43

Android 应 用 开 发 实 践 教 程 图 2-15 线 性 布 局 管 理 器 例 2.15 利 用 线 性 布 局 管 理 器 布 局 界 面 步 骤 如 下 1 创 建 工 程, 命 名 为 LinearLayoutDemo, 默 认 包 名 为 com.mialab. linearlayoutdemo 2 布 局 界 面 如 图 2-15 所 示,A B C 三 个 按 钮 呈 垂 直 线 性 排 列, 布 局 文 件 代 码 如 下 所 示 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" > <Button android:id="@+id/button1" android:text="a" /> <Button android:id="@+id/button2" android:text="b" /> <Button android:id="@+id/button3" android:text="c" /> </LinearLayout> 在 线 性 布 局 中 有 一 个 非 常 重 要 的 属 性,android:layout_weight, 可 译 为 权 重 该 属 性 的 作 用 是 分 配 空 间, 设 置 控 件 在 水 平 ( 垂 直 ) 方 向 宽 度 ( 高 度 ) 的 比 例 这 个 属 性 允 许 我 们 使 用 比 例 的 方 式 来 指 定 控 件 的 大 小, 它 在 手 机 屏 幕 的 适 配 性 方 面 可 以 起 到 非 常 重 要 的 作 用 若 希 望 例 2.15 中 三 个 按 钮 能 占 满 整 个 屏 幕, 则 可 将 布 局 文 件 修 改 如 下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" > <Button android:id="@+id/button1" android:layout_weight="1" android:text="a" /> <Button android:id="@+id/button2" android:layout_weight="1" android:text="b" /> <Button android:id="@+id/button3" android:layout_weight="1" android:text="c" /> </LinearLayout> 44