第6讲

Similar documents
I

修改版-操作手册.doc

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

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

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

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

Microsoft Word - 第3章.doc

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

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

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

世华财讯模拟操作手册

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

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

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

操作手册

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

教师上报成绩流程图

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

引言

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

Microsoft Word - 文件汇编.doc

 编号:

Excel basics

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

全国艺术科学规划项目

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

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


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

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

Cybozu Garoon 3 管理员手册

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

第3章 创建数据库

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

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

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

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

Template BR_Rec_2005.dot

上证指数

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

国债回购交易业务指引

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

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

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

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

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

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

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

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

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

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

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

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

富士通将军空调机 诺可力®X系列 样本

注 意 : 如 上 图 所 示, 网 上 缴 费 (12 月 3 日 至 10 日 ) 与 春 季 高 考 现 场 确 认 工 作 (12 月 3 日 至 6 日 ) 同 时 进 行, 没 有 经 过 现 场 确 认 和 确 认 信 息 没 有 上 传 到 服 务 器 的 考 生 不 能 网 上 缴

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

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

<4D F736F F D20B3D6B2D6CFDEB6EEB1EDB8F1D7EED6D52E646F63>

四川省农村义务教育学生

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

珠江钢琴股东大会

上海证券交易所会议纪要

微软用户

Microsoft Word - 正文.doc

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

抗 日 战 争 研 究 年 第 期

变 量 的 主 要 作 用 是 存 取 数 据 提 供 存 放 信 息 的 容 器 对 于 变 量 必 须 明 确 变 量 的 命 名 变 量 的 类 型 变 量 的 声 明 及 其 变 量 的 作 用 域 JavaScript 是 一 种 弱 类 型 语 言, 也 就 是 说, 在 声 明 变 量

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

<4D F736F F D C4EAB9A4B3CCCBB6CABFCAFDD1A7D7A8D2B5BFCEBFBCCAD4B4F3B8D9D3EBD2AAC7F3>


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

国际财务报告准则第13号——公允价值计量

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

党建评估

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

中 日 信 息 化 的 比 较 与 合 作 一 中 日 信 息 化 的 规 模 比 较

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

标题

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

第二讲 数列

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

<4D F736F F D20D3A5D2EDC6DABBF5D6FACAD6CFB5CDB356312E302DD3C3BBA7CAB9D3C3CBB5C3F7CAE9>

第 9 章 如 果 打 印 机 通 过 FireWire 连 接, 则 HP 建 议 使 用 FireWire 模 块 添 加 打 印 机, 以 充 分 利 用 FireWire 打 印 的 各 项 功 能, 并 且 仅 使 用 IP over Firewire 访 问 打 印 机 的 内 嵌 式

一、资质申请

4.3.3 while 语 句 用 于 无 限 循 环 当 while 语 句 的 表 达 式 永 远 不 会 为 布 尔 假 时, 循 环 将 永 远 不 会 结 束, 形 成 无 限 循 环, 也 称 死 循 环 使 用 while 语 句 构 成 无 限 循 环 的 格 式 通 常

简 报 要 点 ESI 共 有 22 个 学 科 门 类, 江 苏 高 校 目 前 只 有 16 个 学 科 门 类 进 入 了 世 界 1%, 分 别 是 一 般 社 会 科 学 临 床 医 学 农 业 科 学 分 子 生 物 学 和 遗 传 学 动 植 物 科 学 化 学 地 球 科 学 工 程


西 南 民 族 学 院 学 报 哲 学 社 会 科 学 版 第 卷 资 料 来 源 中 国 统 计 年 鉴 年 年 新 中 国 五 十 年 统 计 资 料 汇 编 中 国 人 口 统 计 年 鉴 年 数 据 资 料 来 源 中 国 统 计 年 鉴 中 国 统 计 出 版 社 年 版 资 料 来 源

D. 替 换 7 PowerPoint 中, 插 入 一 张 新 幻 灯 片 的 快 捷 键 是 A.Ctrl+M B.Ctrl+N C.Alt+N D.Alt+M 8 PowerPoint 2010 中 主 要 的 编 辑 视 图 是 A. 幻 灯 片 浏 览 视 图 B. 普 通 视 图 C.

学位论文文档编辑与提交

!!

第二次实习报告

2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

目 录 第 一 章 : 登 陆 平 台 概 述 登 陆 平 台 的 步 骤 第 二 章 : 免 费 实 习 账 号 概 述 创 建 实 习 账 号 第 三 章 : 商 品 价 格 概 述 查 看 价 格 选 择 图 表 快 速 开 立 订 单 详 细 订 单 输 入 第 四 章 : 开 仓 部 位

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

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

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

火车浏览器脚本制作教程

浙 江 天 册 律 师 事 务 所 关 于 杭 州 电 缆 股 份 有 限 公 司 2015 年 年 度 股 东 大 会 的 法 律 意 见 书 发 文 号 :TCYJS2016H0228 致 : 杭 州 电 缆 股 份 有 限 公 司 根 据 中 华 人 民 共 和 国 证 券 法 ( 下 称 证

Transcription:

UI 及 图 形 应 用 开 发 技 术 哈 尔 滨 工 业 大 学 软 件 学 院 唐 好 选 Email:tanghx@hit.edu.cn

主 要 内 容 Android UI 布 局 图 形 控 件 常 用 的 XML 属 性 图 形 界 面 中 常 用 的 控 件 元 素 菜 单 对 话 框

Android 的 UI 布 局 为 了 适 应 各 式 各 样 的 界 面 风 格,Android 系 统 提 供 了 5 种 布 局 格 式, 利 用 这 五 种 布 局 格 式, 可 将 屏 幕 上 的 视 图 随 心 所 欲 的 摆 放, 视 图 的 大 小 和 位 置 会 随 着 手 机 屏 幕 大 小 变 化 作 出 调 整 框 架 布 局 (FrameLayout) 线 性 布 局 (LinearLayout) 相 对 布 局 (RelativeLayout) 表 格 布 局 (TableLayout) 绝 对 布 局 (AbsoluteLayout)

Android UI 布 局 之 框 架 布 局 框 架 布 局 (FrameLayout) 是 最 简 单 的 布 局 方 式, 所 有 添 加 到 布 局 中 的 视 图 都 以 层 叠 的 方 式 显 示, 第 一 个 加 入 的 视 图 放 在 最 底 层, 最 后 一 个 被 放 在 最 顶 层, 上 层 视 图 会 覆 盖 下 层 视 图, 该 显 示 方 式 类 似 于 堆 栈, 又 可 称 为 堆 栈 布 局

Android UI 布 局 之 框 架 布 局 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/background" android:layout_gravity="center" /> <ImageView android:layout_width="63dp" android:layout_height="46dp" android:background="@drawable/bird" android:layout_gravity="center" android:layout_margintop="80dp"/> </FrameLayout>

Android UI 布 局 之 线 性 布 局 线 性 布 局 (LinearLayout) 是 最 常 用 的 布 局 方 式, 分 为 水 平 线 性 布 局 和 垂 直 线 性 布 局 gravity 属 性 用 于 控 制 布 局 中 视 图 的 位 置, 取 值 为 top bottom left right center_vertical center_horizontal 和 center

Android UI 布 局 之 线 性 布 局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout android:orientation="vertical android:layout_weight="1"> <LinearLayout android:orientation="horizontal android:layout_weight="1"> <LinearLayout android:orientation="vertical android:layout_weight="1"> <Button android:text=" 左 上 按 钮 " android:layout_gravity="left" /> </LinearLayout> <LinearLayout android:orientation="vertical android:layout_weight="1"> <Button android:text=" 右 上 按 钮 " android:layout_gravity="right" /> </LinearLayout> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_weight="1" android:gravity="center"> <Button android:text=" 中 心 按 钮 " /> </LinearLayout> </LinearLayout>

Android UI 布 局 之 相 对 布 局 相 对 布 局 (RelativeLayout) 可 以 设 置 某 一 视 图 相 对 于 其 它 视 图 的 位 置, 这 些 位 置 包 括 上 下 左 右, 属 性 分 别 是 android:layout_above android:layout_below android:layout_toleftof android:layout_torightof 此 外, 还 可 设 置 视 图 的 底 端 对 齐

Android UI 布 局 之 相 对 布 局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button1" /> <Button android:id="@+id/button2" android:text="button2" android:layout_torightof="@id/button1 android:layout_below="@id/button1" /> <Button android:id="@+id/button3" android:text="button3" android:layout_toleftof="@id/button2 android:layout_below="@id/button2" /> <Button android:id="@+id/button4" android:text="button4" android:layout_torightof="@id/button2" android:layout_above="@id/button2" /> <Button android:id="@+id/button5" android:text="button5" android:layout_torightof="@id/button2" android:layout_below="@id/button2" /> </RelativeLayout>

Android UI 布 局 之 表 格 布 局 表 格 布 局 (TableLayout) 可 以 将 视 图 按 照 行 列 进 行 排 列, 一 个 表 格 布 局 由 一 个 <TableLayout> 和 若 干 个 <TableRow> 组 成

Android UI 布 局 之 表 格 布 局 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" <TableRow android:paddingtop="20dp" > <ImageView android:src="@drawable/christmas_background1_small" /> <ImageView android:src="@drawable/christmas_background2_small" android:paddingleft="20dp"/> <ImageView android:src="@drawable/christmas_background3_small" android:paddingleft="20dp"/> <ImageView android:src="@drawable/christmas_background4_small" android:paddingleft="20dp"/> </TableRow> <TableRow android:paddingtop="20dp"> </TableRow> </TableLayout>

Android UI 布 局 之 绝 对 布 局 绝 对 布 局 (AbsoluteLayout) 可 以 任 意 设 置 视 图 的 位 置, 用 android_layout_x 和 android_layout_y 属 性 进 行 设 置 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:layout_x="80dip" android:layout_y="15dip" android:layout_width="wrap_content" android:width="200px" android:layout_height="wrap_content" /> </AbsoluteLayout>

重 用 Android 的 布 局 文 件 在 复 杂 的 应 用 程 序 中, 同 一 个 布 局 往 往 需 要 使 用 多 次, 此 时 需 要 重 用 XML 布 局 文 件 XML 布 局 文 件 提 供 一 个 <include> 标 签, 通 过 该 标 签 可 在 一 个 布 局 文 件 中 引 用 另 外 一 个 布 局 文 件, 可 以 将 多 处 使 用 的 布 局 单 独 放 在 一 个 或 者 多 个 布 局 文 件 中, 然 后 在 使 用 到 这 些 布 局 文 件 时 用 <include> 标 签 来 引 用 <include android:id= @+id/cell1 layout= @layout/workspace_screen > <include android:id= @+id/cell2 layout= @layout/workspace_screen > <include android:id= @+id/cell3 layout= @layout/workspace_screen >

主 要 内 容 Android UI 布 局 图 形 控 件 常 用 的 XML 属 性 图 形 界 面 中 常 用 的 控 件 元 素 菜 单 对 话 框

控 件 常 用 XML 属 性 android:id 是 控 件 标 识, 若 要 在 代 码 或 者 XML 布 局 文 件 中 引 用 某 个 控 件, 必 须 设 置 该 属 性, 用 引 用 (reference) 来 表 示 该 属 性, 具 体 格 式 为 : @id/value 或 @+id/value 第 一 种 格 式 (@id/value) 中 的 value 必 须 在 R.id 类 中 存 在, 如 果 不 存 在,XML 布 局 文 件 无 法 验 证 通 过 第 二 种 格 式 (@+id/value) 中 的 value 可 以 不 出 现 在 R.id 类 中, 如 果 不 存 在,R.id 类 中 会 新 建 一 个 int 类 型 的 变 量, 为 了 提 高 应 用 程 序 的 容 错 性 能, 建 议 采 用 第 二 种 格 式

控 件 常 用 XML 属 性 ( 续 ) android:layout_width 和 android:layout_height 表 示 控 件 的 宽 度 和 高 度, 可 按 如 下 几 种 方 式 设 置 : fill_parent: 表 示 控 件 宽 度 和 高 度 尽 可 能 满 足 父 控 件 的 空 间, 如 果 当 前 控 件 在 最 上 层, 则 充 满 整 个 屏 幕 wrap_content: 表 示 控 件 高 度 和 宽 度 根 据 控 件 中 内 容 确 定, 在 满 足 完 全 显 示 控 件 内 容 的 前 提 下, 将 宽 度 和 高 度 设 置 为 最 小 准 确 尺 寸, 单 位 通 常 为 px 或 dp ( 或 dip),px 表 示 屏 幕 像 素 点, dp 类 似 于 像 素 点, 但 该 单 位 与 屏 幕 密 度 相 关

控 件 常 用 XML 属 性 ( 续 ) android:layout_margin 用 于 设 置 控 件 到 相 邻 控 件 或 边 缘 的 距 离, 该 属 性 设 置 四 个 方 向 距 离, 包 括 Left Right Top Bottom 若 想 单 独 设 置 某 一 个 方 向 距 离, 可 以 使 用 如 下 四 个 属 性 android:layout_marginleft android:layout_marginright android:layout_margintop android:layout_marginbottom 当 两 种 设 置 方 法 共 存 时, 系 统 优 先 使 用 android:layout_margin 属 性

控 件 常 用 XML 属 性 ( 续 ) android:layout_padding 用 于 设 置 控 件 内 容 在 4 个 方 向 距 离 控 件 边 缘 的 距 离, 如 果 想 单 独 设 置 某 一 个 方 向 距 离, 可 以 使 用 如 下 四 个 属 性 android:layout_paddingleft android:layout_paddingright android:layout_paddingtop android:layout_paddingbottom 当 两 种 设 置 方 法 共 存 时, 系 统 优 先 使 用 android:layout_padding 属 性

控 件 常 用 XML 属 性 ( 续 ) android:layout_weight 用 于 设 置 控 件 的 均 衡 布 局 所 谓 均 衡 布 局 是 指 两 个 或 者 多 个 控 件 要 占 用 等 比 例 的 区 域, 它 们 所 占 的 比 例 不 因 屏 幕 方 向 屏 幕 密 度 或 屏 幕 高 度 变 化 而 改 变, 该 属 性 的 设 置 值 必 须 为 正 整 数, 且 不 加 任 何 单 位 android: layout_weight = 1

控 件 常 用 XML 属 性 ( 续 ) android:layout_gravity 和 android:gravity, 分 别 表 示 控 件 和 控 件 中 内 容 的 位 置, 常 用 的 属 性 值 包 括 center_horizontal, 表 示 水 平 居 中 center_vertical, 表 示 垂 直 居 中 center, 表 示 水 平 和 垂 直 两 个 方 向 居 中 left, 设 置 到 左 侧 right, 设 置 到 右 侧 top, 设 置 到 顶 端 bottom, 设 置 到 底 端 上 述 属 性 的 组 合, 属 性 之 间 用 连 接

控 件 常 用 XML 属 性 ( 续 ) android:visibility, 决 定 当 前 控 件 是 否 可 见, 可 设 置 为 visible, 控 件 可 见 invisible, 控 件 不 可 见, 但 保 留 控 件 位 置, 相 当 于 完 全 透 明 的 控 件 gone, 表 示 控 件 不 可 见, 也 不 保 留 控 件 的 位 置

控 件 常 用 XML 属 性 ( 续 ) android:background, 用 于 设 置 控 件 的 背 景 色 和 背 景 图, 如 果 设 置 背 景 色, 需 要 使 用 #color 形 式 的 属 性 值, 表 示 一 个 十 六 进 制 的 颜 色 值, 可 以 有 如 下 几 种 形 式 :RGB ARGB RRGGBB 和 AARRGGBB 等, 其 中 A 表 示 透 明 度,RGB 分 别 表 示 红 绿 蓝 三 种 基 色 android:background 还 可 以 表 示 背 景 图, 格 式 为 : @drawable/resourceid resourceid 表 示 图 像 资 源 ID( 位 于 res/drawable 目 录 中 的 图 像 文 件 在 R.drawable 类 中 对 应 的 int 类 型 变 量 )

控 件 常 用 XML 属 性 ( 续 ) android:onclick, 可 直 接 指 定 当 前 装 载 布 局 文 件 的 Activity 类 中 单 击 事 件 的 方 法 名, 该 方 法 的 定 义 要 与 单 击 事 件 一 致 public void onclick_connect(view view) { } <Button android:layout_width = fill_parent android:layout_height = wrap_content android:text = 连 接 android:onclick = onclick_connect /> android_clickable 和 android:longclickable 两 个 属 性 均 可 设 置 为 布 尔 值, 表 示 当 前 控 件 是 否 接 受 单 击 事 件 和 长 按 单 击 事 件

控 件 常 用 XML 属 性 ( 续 ) android:focusable, 表 示 当 前 控 件 是 否 可 以 通 过 键 盘 或 者 轨 迹 球 获 得 焦 点 android:focusableintouchmode, 表 示 当 触 摸 一 个 控 件 时, 是 否 可 将 当 前 焦 点 移 动 到 被 触 摸 的 控 件 上

主 要 内 容 Android UI 布 局 图 形 控 件 常 用 的 XML 属 性 图 形 界 面 中 常 用 的 控 件 元 素 菜 单 对 话 框

图 形 界 面 中 常 用 的 控 件 元 素 (1) 文 本 控 件 TextView: 显 示 文 本 的 控 件 EditText: 编 辑 文 本 的 控 件 按 钮 和 复 选 框 控 件 普 通 按 钮 控 件 Button 图 像 按 钮 控 件 ImageButton 选 项 按 钮 控 件 RadioButton 开 关 状 态 按 钮 控 件 ToggleButton 复 选 框 控 件 CheckBox ImageView: 显 示 图 像 的 控 件

图 形 界 面 中 常 用 的 控 件 元 素 (2) 时 间 和 日 期 控 件 输 入 日 期 的 控 件 DatePicker 输 入 时 间 的 控 件 TimePicker 显 示 时 钟 的 控 件 AnalogClock 和 DigitalCleck 进 度 条 控 件 进 度 条 控 件 ProgressBar 拖 动 条 控 件 SeekBar 评 分 控 件 RatingBar

图 形 界 面 中 常 用 的 控 件 元 素 (3) 列 表 控 件 普 通 列 表 控 件 ListView 可 扩 展 的 列 表 控 件 ExpandableListView 下 拉 列 表 控 件 Spinner 滚 动 控 件 垂 直 滚 动 控 件 ScrollView 水 平 滚 动 控 件 HorizontalScrollView 画 廊 控 件 Gallery

图 形 界 面 中 常 用 的 控 件 元 素 (4) 图 像 切 换 控 件 ImageSwitcher 网 格 控 件 GridView 标 签 控 件 TabHost 惰 性 装 载 控 件 ViewStub

显 示 文 本 的 控 件 -TextView 功 能 显 示 单 行 / 多 行 文 本 显 示 富 文 本 显 示 表 情 主 要 属 性 属 性 共 66 个 autolink, autotext, buffertype, capitalize, ellipsize,lines 等 主 要 方 法 约 300 个 settext() 等

显 示 文 本 的 控 件 - 显 示 富 文 本 富 文 本 (URL 不 同 大 小 字 体 颜 色 的 文 本 ) 可 设 置 <TextView> 标 签 的 android:autolink 属 性 匹 配 内 容 none: 不 匹 配 任 何 链 接 web: 匹 配 web 网 址 email: 匹 配 Email 地 址 phone: 匹 配 电 话 号 码 map: 匹 配 映 射 地 址 all: 匹 配 所 有 链 接, 匹 配 所 有 特 殊 的 文 本 CharSequence charsequence = Html.fromHtml(html); textview1.settext(charsequence); textview1.setmovementmethod(linkmovementmethod.getinstance());

显 示 文 本 的 控 件 - 显 示 表 情 图 像 和 文 字 String html = " 图 像 1<img src='image1'/><p>"; CharSequence charsequence = Html.fromHtml(html, new ImageGetter() { @Override public Drawable getdrawable(string source){ Drawable drawable = getresources().getdrawable(getresourceid(source)); drawable.setbounds(0, 0, drawable.getintrinsicwidth() / 2, drawable.getintrinsicheight() / 2); return drawable; } }, null); textview.settext(charsequence); textview.setmovementmethod(linkmovementmethod.getinstance ());

编 辑 文 本 的 控 件 -EditText EditText 是 TextView 的 子 类, 拥 有 TextView 类 的 一 切 属 性 及 方 法, EditText 通 常 用 于 输 入 和 编 辑 文 本 基 本 功 能 输 入 普 通 文 本 输 入 表 情 文 本 输 入 特 定 字 符

编 辑 文 本 的 控 件 EditText- 输 入 特 定 字 符 <EditText android:digits="0123456789" /> <EditText android:digits="abcdefghijklmnopqrstuvwxyz" /> <EditText android:inputtype="number textcapcharacters" /> <EditText android:inputtype="textemailaddress" /> <EditText android:numeric="decimal signed" />

按 钮 和 复 选 框 Android 的 按 钮 包 括 多 种 类 型 普 通 按 钮 (Button) 图 像 按 钮 (Image Button) 选 项 按 钮 (RadioButton) 开 关 状 态 按 钮 (ToggleButton) 复 选 框 (CheckBox)

普 通 按 钮 控 件 Button <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 我 的 按 钮 1" /> 最 常 用 的 按 钮 事 件 是 单 击 事 件 通 过 Button 类 的 setonclicklistener 方 法 设 置 处 理 单 击 事 件 也 可 直 接 通 过 android:onclick 属 性 指 定 单 击 事 件 方 法 如 果 当 前 类 实 现 了 android.view.view.onclicklistener 接 口, 可 以 直 接 将 this 作 为 参 数 传 递 给 setonclicklistener 方 法 除 了 单 击 事 件, 按 钮 还 包 括 如 下 事 件 触 摸 事 件 (ontouch) 焦 点 变 化 事 件 (onfocuschange) 键 盘 事 件 (onkey)

普 通 按 钮 控 件 Button( 示 例 )

图 文 混 排 的 按 钮 使 用 <Button> 标 签 的 android:drawablexxx 属 性,Xxx 表 示 Top/ Bottom/Left/Right, 需 指 定 图 像 资 源 ID, 表 示 在 按 钮 的 上 下 左 右 插 入 一 个 图 像, 还 可 配 合 android:drawablepadding 设 置 图 像 与 文 字 之 间 的 距 离 Button 与 EditText 一 样, 是 TextView 的 子 类, 可 采 用 与 TextView EditText 同 样 的 方 法 实 现 图 文 混 排 <Button android:drawabletop="@drawable/star" android:text=" 按 钮 1" /> <Button android:drawablebottom="@drawable/star" android:text=" 按 钮 2" android:drawablepadding="30dp" /> <Button android:drawableleft="@drawable/star android:text=" 按 钮 3" /> <Button android:drawableright="@drawable/star" android:text=" 按 钮 4" android:drawablepadding="20dp" />

图 像 按 钮 控 件 ImageButton <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/button1_1" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/button2_1" /> 在 代 码 中 修 改 ImageButton 图 像 : ImageButton.setImageResource() ImageButton 不 是 TextView 的 子 类, 而 是 ImageView 的 子 类, 没 有 android:text 属 性, 如 要 输 出 文 字, 可 以 自 定 义 控 件, 在 ondraw 方 法 中 画 出 文 字 部 分

选 项 按 钮 控 件 RadioButton 用 于 单 选, 通 常 将 该 标 签 放 在 <RadioGroup> 标 签 中 RadioButton 是 Button 的 间 接 子 类, 可 以 用 Button 的 属 性 <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioButton android:text=" 选 项 1" /> <RadioButton android:text=" 选 项 2" /> <RadioButton android:text=" 选 项 3" android:drawableleft="@drawable/star" android:drawabletop="@drawable/circle" android:drawableright="@drawable/star" android:drawablebottom="@drawable/circle" android:drawablepadding="20dp" /> </RadioGroup>

开 关 状 态 按 钮 控 件 ToggleButton 类 似 于 Button, 但 提 供 了 可 以 表 示 开 / 关 状 态 的 功 能 是 Button 的 子 类, 但 android:text 属 性 无 效, 可 使 用 android:texton android:textoff 和 android:checked 属 性 <ToggleButton android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ToggleButton android:id="@+id/togglebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="30dp" android:textoff=" 打 开 电 灯 " android:texton=" 关 闭 电 灯 " />

复 选 框 控 件 CheckBox CheckBox 默 认 未 选 中 状 态, 可 通 过 android:checked 属 性 设 置 CheckBox 模 板 定 义 通 常 不 在 main.xml 布 局 文 件 中, 而 是 位 于 单 独 的 布 局 文 件 中 //checkbox.xml 文 件 <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/checkbox" android:layout_width="fill_parent" android:layout_height="wrap_content" /> //main.xml 文 件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/button" android:text=" 确 定 " /> </LinearLayout>

显 示 图 像 的 控 件 ImageView ImageView 专 门 用 于 显 示 和 控 制 图 像, 例 如 图 像 的 放 大 缩 小 和 旋 转 等 ImageView 支 持 的 图 像 格 式 包 括 gif jpg png 和 bmp 等, 在 布 局 文 件 中 使 用 <ImageView> 标 签 来 定 义 一 个 ImageView 控 件 <ImageView android:layout_width="300dp" android:background="#fff" android:layout_height="200dp" android:src="@drawable/background" android:scaletype="fitcenter" android:padding="10dp" />

显 示 指 定 区 域 的 图 像 ImageView 通 常 用 于 显 示 整 幅 图 像, 如 果 要 显 示 图 像 的 某 一 个 局 部, 则 需 要 对 图 像 进 行 特 殊 处 理 可 通 过 android.graphics.bitmapfactory 的 静 态 方 法 decodefile 从 不 同 来 源 ( 比 如 sd 卡 ) 获 得 Bitmap 对 象 由 于 手 机 无 法 装 载 过 大 图 像 资 源, 因 此 有 时 需 要 将 图 像 按 比 例 缩 小 来 装 载 ( 不 是 显 示 效 果 上 的 缩 小, 而 是 图 像 本 身 的 缩 小 ) Options options = new Options(); options.insamplesize = 4; //1/4 of the whole Image Bitmap bitmap = BitmapFactory.decodeFile( /sdcard/abc.jpg,options)

显 示 指 定 区 域 的 图 像

缩 放 和 旋 转 图 像 缩 放 图 像 可 通 过 改 变 ImageView 控 件 的 大 小 来 实 现, 但 需 要 将 <ImageView> 标 签 的 android:scaletype 属 性 设 置 为 fitcenter 旋 转 图 像 可 用 android.graphics.matrix 类 的 setrotate 方 法 实 现, 通 过 该 方 法 可 指 定 旋 转 度 数

时 间 和 日 期 控 件 DatePicker 用 于 输 入 和 编 辑 日 期 TimePicker 用 于 输 入 和 编 辑 时 间 DigitalClock 可 以 数 字 方 式 显 示 时 间 AnalogClock 可 以 表 盘 方 式 显 示 时 间

输 入 日 期 的 控 件 DatePicker DatePicker 可 用 于 输 入 日 期, 日 期 范 围 为 1900-1-1 到 2100-12-31 DatePicker 控 件 的 基 本 使 用 方 法 为 <DatePicker android:id = @+id/datepicker android:layout_width = fill_parent android:layout_height = wrap_content /> 通 过 DatePicker 类 的 getyear getmonth 和 getdayofmonth 方 法 可 以 分 别 获 得 DatePicker 控 件 当 前 显 示 的 年 月 日 通 过 DatePicker 的 init 方 法 可 实 现 控 件 的 初 始 化 通 过 ondatechangedlistener 可 监 控 日 期 变 化 事 件

输 入 时 间 的 控 件 TimePicker TimePicker 可 用 于 输 入 时 间, 只 能 输 入 小 时 和 分 钟, 默 认 情 况 下 是 12 小 时 进 制, 若 想 调 整 为 24 小 时 进 制, 可 使 用 TimePicker 类 的 setis24hourview 方 法 进 行 设 置 TimePicker 控 件 的 基 本 使 用 方 法 为 <TimePicker android:id = @+id/timepicker android:layout_width = fill_parent android:layout_height = wrap_content /> 通 过 TimePicker 类 的 getcurrenthour getcurrentminute 方 法 可 以 分 别 获 得 TimePicker 控 件 当 前 显 示 的 时 分 通 过 setontimechangedlistener 方 法 可 设 置 事 件 变 化 的 事 件 对 象

显 示 时 钟 的 控 件 AnalogClock 控 件 用 于 以 表 盘 方 式 显 示 当 前 时 间 <AnalogClock android:layout_width= fill_parent android:layout_height= wrap_content /> DigitalClock 控 件 用 于 以 数 字 方 式 显 示 当 前 的 时 分 秒 <DigitalClock android:layout_width= wrap_content android:layout_height= wrap_content android:textsize = 18dp />

进 度 条 控 件 进 度 条 控 件 ProgressBar 拖 动 条 控 件 SeekBar 评 分 控 件 RatingBar

进 度 条 控 件 ProgressBar ProgressBar 默 认 情 况 下 是 圆 形 进 度 条, 也 支 持 水 平 进 度 条, 可 通 过 style 属 性 将 圆 形 进 度 条 设 置 为 大 中 小 三 种 形 式, 默 认 为 中 型 ProgressBar 控 件 的 水 平 进 度 条 支 持 两 级 进 度, 分 别 使 用 android:progress 和 android:secondaryprogress 进 行 设 置, 进 度 条 的 总 刻 度 使 用 android:max 属 性 设 置, 一 般 情 况 下, 两 级 进 度 条 的 属 性 值 应 小 于 等 于 android:max 属 性 值 Android 支 持 将 水 平 和 圆 形 的 进 度 条 放 在 Activity 标 题 栏 在 setcontentview 方 法 之 前 调 用 requestwindowfeature 方 法 setprogressbarindeterminatevisibility setprogressvisibility 和 setprogress 等 方 法 在 setcontentview 方 法 之 后 调 用 放 在 标 题 栏 上 的 水 平 进 度 条 不 能 设 置 进 度 条 的 最 大 刻 度, 系 统 已 经 设 置 最 大 刻 度 为 10000

进 度 条 控 件 ProgressBar 示 例

拖 动 条 控 件 SeekBar SeekBar 可 以 通 过 拖 动 滑 杆 改 变 当 前 的 值, 虽 然 SeekBar 是 ProgressBar 的 子 类, 但 无 第 二 级 进 度 与 SeekBar 控 件 滑 动 相 关 的 事 件 接 口 是 onseekbarchangelistener, 该 接 口 定 义 三 个 事 件 方 法 onprogresschanged, 拉 动 滑 杆 进 行 滑 动 时 触 发 onstarttrackingtouch, 按 住 滑 杆 时 触 发 onstoptrackingtouch, 松 开 滑 杆 时 触 发

设 置 SeekBar 和 ProgressBar 的 颜 色 和 背 景 SeekBar 和 ProgressBar 默 认 进 度 条 为 黄 色, 不 能 直 接 修 改 进 度 条 颜 色 和 背 景 图,android:progressDrawable 属 性 可 用 来 修 改 颜 色 和 背 景 进 度 条 的 颜 色 分 为 三 个 部 分 : 第 一 级 进 度 条 第 二 级 进 度 条 和 背 景 ( 进 度 条 未 经 过 的 地 方 ), 可 通 过 如 下 方 法 进 行 设 置 : 建 立 三 个 图 像 文 件 (png 文 件 ), 分 别 表 示 三 个 区 域 的 颜 色 在 res/drawable 目 录 下 建 立 一 个 barcolor.xml 文 件 在 <ProgressBar> 和 <SeekBar> 标 签 中 使 用 android:progressdrawable 属 性 指 定 barcolor.xml 文 件 的 资 源 ID

评 分 控 件 RatingBar RatingBar 控 件 可 配 置 的 属 性 包 括 android:numstars 指 定 用 于 评 分 的 五 角 星 数 android:rating 指 定 当 前 的 分 数 android:stepsize 指 定 分 数 的 增 量 单 位, 默 认 为 0.5 RatingBar 还 可 设 置 为 不 同 风 格 ( 小 五 角 星 风 格 和 指 示 五 角 星 风 格 ) 通 过 onratingbarchangelistener 可 监 听 RatingBar 控 件 的 动 作

列 表 控 件 ListView: 普 通 列 表 控 件 ExpandedListView: 可 扩 展 的 列 表 控 件 Spinner: 下 拉 列 表 框

普 通 列 表 控 件 ListView 主 要 用 于 以 列 表 形 式 显 示 数 据, 采 用 MVC 模 式 将 前 端 显 示 与 后 端 数 据 进 行 分 离 ListView 控 件 在 装 载 数 据 时 并 不 直 接 使 用 add 方 法 添 加 数 据, 而 是 需 要 指 定 一 个 Adapter 对 象 ( 相 当 于 MVC 模 式 中 的 C), 而 ListView 则 相 当 于 MVC 模 式 中 的 V, 用 于 显 示 数 据, 为 ListView 提 供 数 据 的 List 或 数 组 相 当 于 MVC 模 式 中 的 M ListView 控 件 通 过 Adapter 对 象 获 得 需 要 显 示 的 数 据, 因 此 在 创 建 Adapter 对 象 时 需 要 指 定 要 显 示 的 数 据 (List 或 者 数 组 对 象 ) 要 显 示 的 数 据 与 ListView 之 间 通 过 Adapter 对 象 进 行 连 接, 同 时 又 互 相 独 立 ListView 只 知 道 显 示 的 数 据 来 自 于 Adapter, 并 不 知 道 这 些 数 据 来 自 于 数 组 还 是 List; 对 于 数 据 来 说, 只 知 道 将 这 些 数 据 添 加 到 Adapter 对 象 中, 并 不 知 道 这 些 数 据 会 被 用 于 ListView 控 件 或 其 他 控 件

普 通 列 表 控 件 ListView 1 首 先 定 义 ListView 控 件 <ListView android:id="@+id/lvcommonlistview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 2 创 建 一 个 Adapter 对 象 ArrayAdapter<String> aadata = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1, data); //data 为 数 组 或 者 list //simple_list_item_1.xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textappearance="?android:attr/textappearancelarge" android:gravity="center_vertical" android:paddingleft="6dip" android:minheight="?android:attr/listpreferreditemheight"/>

普 通 列 表 控 件 ListView 3 将 ArrarAdapter 对 象 与 ListView 绑 定 ListView lvcommonlistview = (ListView) findviewbyid(r.id.lvcommonlistview); lvcommonlistview.setadapter(aadata); 调 用 setadapter 方 法 后,ListView 每 个 列 表 项 都 会 使 用 已 定 义 模 板 显 示, 并 将 data 数 组 中 的 元 素 赋 值 给 列 表 项 在 默 认 情 况 下,ListView 控 件 选 中 第 一 项,setSelection 方 法 可 选 定 指 定 列 表 项 与 列 表 项 相 关 的 事 件 包 括 ItemSelected( 列 表 项 被 选 中 时 触 发 ) ItemClick( 单 击 列 表 项 时 触 发 ) 为 截 获 这 两 个 事 件, 需 要 分 别 实 现 OnItemSelectedListener 和 OnItemClickListener 接 口

普 通 列 表 控 件 ListView public void onitemclick(adapterview<?> parent, View view, int position,long id){ Log.d("itemclick", "click " + position + " item");} public void onitemselected(adapterview<?> parent, View view, int position,long id){ Log.d("itemselected", "select " + position + " item");}

为 ListView 添 加 复 选 框 和 选 项 按 钮 要 同 时 选 择 多 个 列 表 项, 需 要 在 每 个 列 表 项 上 添 加 RadioButton CheckBox 和 CheckedTextView( 用 作 为 被 选 择 标 志 ) 控 件, 添 加 这 三 个 控 件 分 别 需 要 如 下 三 个 布 局 文 件 simple_list_item_single_choice.xml, 对 应 的 资 源 ID 为 android.r.layout.simple_list_item_single_choice simple_list_item_multiple_choice.xml, 对 应 的 资 源 ID 为 android.r.layout.simple_list_item_multiple_choice simple_list_item_checked.xml, 对 应 的 资 源 ID 为 android.r.layout.simple_list_item_checked

为 ListView 添 加 复 选 框 和 选 项 按 钮 在 布 局 文 件 中 通 过 android:checkmark 设 置 了 一 个 主 题 属 性, 从 而 可 以 使 CheckedTextView 变 成 拥 有 不 同 风 格 的 选 择 控 件 // simple_list_item_multiple_choice.xml <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="?android:attr/listpreferreditemheight" android:textappearance="?android:attr/textappearancelarge" android:gravity="center_vertical" android:checkmark="?android:attr/listchoiceindicatormultiple" android:paddingleft="6dip" android:paddingright="6dip" />

为 ListView 添 加 复 选 框 和 选 项 按 钮 public void oncreate(bundle savedinstancestate){ String[] data = new String[] { "Android", "Meego" }; ArrayAdapter<String> aacheckedtextviewadapter = new ArrayAdapter<String>( this, android.r.layout.simple_list_item_checked, data); lvcheckedtextview.setadapter(aacheckedtextviewadapter); lvcheckedtextview.setchoicemode(listview.choice_mode_single); ArrayAdapter<String> aaradiobuttonadapter = new ArrayAdapter<String>( this, android.r.layout.simple_list_item_single_choice, data); lvradiobutton.setadapter(aaradiobuttonadapter); lvradiobutton.setchoicemode(listview.choice_mode_single); ArrayAdapter<String> aacheckboxadapter = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_multiple_choice, data); lvcheckbox.setadapter(aacheckboxadapter); lvcheckbox.setchoicemode(listview.choice_mode_multiple);}

为 ListView 添 加 复 选 框 和 选 项 按 钮

对 ListView 列 表 项 进 行 增 删 改 操 作 ListView 控 件 的 动 态 操 作 可 通 过 一 个 动 态 的 Adapter 实 现, 而 自 定 义 Adapter(ViewAdapter) 一 般 需 要 从 android.widget.baseadapter 类 继 承, 常 用 的 方 法 包 括 getview 和 getcount 由 于 BaseAdapter 类 并 不 像 Activity 类 有 getlayoutinflater() 方 法 可 以 获 得 LayoutInflater 对 象, 因 此 需 要 使 用 Context 类 的 getsystemservice 方 法 类 获 得 LayoutInflater 对 象 ListView 可 显 示 两 类 列 表 项 ( 文 本 和 图 像 列 表 项 ),ViewAdapter 类 中 应 该 包 括 TextView 和 ImageView 对 象 的 添 加 删 除 和 修 改 等 方 法 当 列 表 中 的 数 据 发 生 变 化 后, 需 要 使 用 BaseAdapter 类 的 notifydatasetchanged 方 法 通 知 Adapter 对 象 数 据 已 经 发 生 变 化, 并 由 系 统 调 用 getview 方 法 返 回 相 应 的 View 对 象

对 ListView 列 表 项 进 行 增 删 改 操 作 public View getview(int pos, View convertview, ViewGroup parent){ String inflater = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater layoutinflater = (LayoutInflater) context.getsystemservice(inflater); if (textidlist.get(pos) instanceof String){ linearlayout = (LinearLayout) layoutinflater.inflate(r.layout.text, null); TextView textview = ((TextView) linearlayout.findviewbyid(r.id.textview)); textview.settext(string.valueof(textidlist.get(pos)));} else if (textidlist.get(pos) instanceof Integer){ linearlayout = (LinearLayout) layoutinflater.inflate(r.layout.image, null); ImageView imageview = (ImageView) linearlayout.findviewbyid(r.id.imageview); imageview.setimageresource(integer.parseint(string.valueof(textidlist.get(pos)))); } return linearlayout; }

对 ListView 列 表 项 进 行 增 删 改 操 作

ListActivity ListActivity 实 际 上 是 ListView 和 Activity 的 结 合 体, 也 就 是 说, 一 个 ListActivity 就 是 内 嵌 一 个 ListView 控 件 的 Activity,ListActivity 类 的 内 部 通 过 代 码 创 建 ListView 对 象, 因 此, 使 用 ListActivity 并 不 需 要 使 用 布 局 文 件 来 定 义 ListView 控 件 如 果 Activity 中 只 包 含 一 个 ListView, 使 用 ListActivity 是 非 常 方 便 的, 可 以 通 过 ListActivity 类 的 setlistadapter 方 法 来 设 置 Adapter 对 象, 该 方 法 相 当 于 调 用 了 ListView 类 的 setadapter 方 法 也 可 以 通 过 ListActivity.getListView 方 法 获 得 当 前 ListActivity 的 ListView 对 象, 并 像 操 作 普 通 的 ListView 对 象 一 样 操 作 ListActivity 中 的 ListView

可 扩 展 列 表 控 件 ExpandableListView 与 菜 单 和 子 菜 单 类 似,ExpandableListView 列 表 项 分 为 组 列 表 项 和 子 列 表 项, 单 击 组 列 表 项 会 显 示 当 前 列 表 项 下 的 所 有 子 列 表 项 ExpandableListView 是 ListView 的 直 接 子 类, 拥 有 ListView 的 一 切 特 性, 也 有 一 个 与 之 对 应 的 ExpandableListActivity 类 与 ListActivity 一 样, ExpandableListActivity 类 也 需 要 一 个 Adapter 类, 该 类 继 承 自 BaseExpandableListAdapter, 类 中 有 两 个 核 心 的 方 法 getgroupview, 返 回 组 列 表 项 对 象 getchildview, 返 回 子 列 表 项 对 象

下 拉 列 表 控 件 Spinner Spinner 控 件 用 于 显 示 下 拉 列 表, 用 法 与 ListView 控 件 类 似, 在 装 载 数 据 时 也 需 要 创 建 Adapter 对 象

滚 动 控 件 ScrollView: 垂 直 滚 动 控 件 HorizontalScrollView: 水 平 滚 动 控 件 Gallery: 画 廊 控 件 ImageSwitcher: 图 像 切 换 控 件

垂 直 滚 动 控 件 ScrollView ScrollView 支 持 垂 直 滚 动, 只 包 含 一 个 控 件 通 常 在 <ScrollView> 标 签 中 定 义 一 个 <LinearLayout> 标 签, 将 其 属 性 android:orientation 设 置 为 vertical, 在 <LinearLayout> 标 签 中 放 置 多 个 控 件, 如 果 控 件 所 占 用 的 总 高 度 超 过 屏 幕 高 度, 则 出 现 滚 动 条 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:orientation="vertical" > <TextView android:text=" 滚 动 视 图 " android:textsize="30dp" /> <ImageView android:src="@drawable/item1" /> <TextView android:text=" 只 支 持 垂 直 滚 动 " android:textsize="30dp" /> <ImageView android:src="@drawable/item2" /> <ImageView android:src="@drawable/item3" /> </LinearLayout> </ScrollView>

垂 直 滚 动 控 件 ScrollView

画 廊 控 件 Gallery Gallery 一 般 用 于 显 示 图 像 列 表, 只 能 水 平 显 示 一 行, 支 持 水 平 滑 动 效 果 一 般 情 况 下,Gallery 只 能 显 示 指 定 数 目 的 图 像 ( 也 可 以 是 其 它 视 图 控 件 ), 还 可 循 环 显 示 Gallery 中 的 图 像 public View getview(int position, View convertview, ViewGroup parent) { ImageView imageview = new ImageView(mContext); imageview.setimageresource(resids[position % resids.length]); imageview.setscaletype(imageview.scaletype.fit_xy); imageview.setlayoutparams(new Gallery.LayoutParams(136, 88)); imageview.setbackgroundresource(mgalleryitembackground); return imageview; }

画 廊 控 件 Gallery

图 像 切 换 控 件 ImageSwitcher 用 于 不 同 图 像 之 间 切 换, 切 换 过 程 可 采 用 动 画 方 式,ImageSwitcher 需 要 一 个 视 图 工 厂 (ViewFactory) 来 创 建 用 于 显 示 图 像 的 ImageView 对 象,ViewFactory 接 口 有 一 个 makeview 方 法, 类 似 于 BaseAdapter 中 的 getview 方 法, 用 于 创 建 要 显 示 的 ImageView 对 象

其 它 控 件 GridView: 网 格 控 件 TabHost: 标 签 控 件 ViewStub: 惰 性 装 载 控 件

网 格 控 件 GridView GridView 采 用 二 维 表 的 方 式 显 示 列 表 项 ( 也 可 称 为 单 元 格 ), 每 个 单 元 格 是 一 个 View 对 象, 单 元 格 上 可 以 放 置 任 意 控 件 需 要 设 置 <GridView> 标 签 的 columnwidth 属 性 或 通 过 setcolumnwidth 方 法 设 置 列 数,GridView 自 动 折 行 显 示

标 签 控 件 TabHost 标 签 控 件 可 对 屏 幕 进 行 分 页 显 示, 单 击 标 签 控 件 的 不 同 标 签 时, 会 显 示 当 前 标 签 的 内 容, 每 个 标 签 可 显 示 一 个 View 或 者 一 个 Activity TabHost 是 标 签 控 件 的 核 心 类, 每 个 标 签 是 TabHost.TabSpec 对 象, 通 过 TabHost 的 addtab 可 添 加 多 个 TabHost.TabSpec 对 象, 如 果 从 布 局 文 件 中 添 加, 首 先 需 要 建 立 布 局 文 件, 并 且 根 节 点 要 使 用 <FrameLayout> 或 <TabHost> 标 签

惰 性 装 载 控 件 ViewStub ViewStub 是 不 可 视 控 件, 其 作 用 与 <include> 标 签 基 本 相 同, 在 布 局 文 件 中 使 用 <ViewStub> 标 签 来 引 用 其 他 的 布 局 文 件, 与 <include> 标 签 唯 一 的 不 同 是 ViewStub 并 不 会 马 上 装 载 引 用 的 布 局 文 件, 只 有 在 调 用 了 ViewStub.inflate 或 者 ViewStub.setVisibility(View.VISIBLE) 方 法 后, ViewStub 才 会 装 载 引 用 的 布 局 <include> 标 签 的 android:id 属 性 直 接 覆 盖 所 引 用 布 局 文 件 中 根 节 点 的 android:id 属 性, 而 <ViewStub> 标 签 的 android:id 属 性 与 普 通 控 件 标 签 的 android:id 属 性 一 样, 用 于 在 代 码 中 引 用 控 件, 在 <ViewStub> 标 签 中 需 要 使 用 android:inflatedid 属 性 覆 盖 所 引 用 布 局 文 件 中 的 根 节 点 的 android:id 属 性 值

主 要 内 容 Android UI 布 局 图 形 控 件 常 用 的 XML 属 性 图 形 界 面 中 常 用 的 控 件 元 素 菜 单 对 话 框

Android 菜 单 的 主 要 类 型 选 项 菜 单 带 图 像 复 选 框 选 项 按 钮 的 菜 单 上 下 文 菜 单 自 定 义 菜 单

选 项 菜 单 Options Menu Activity 类 的 oncreateoptionsmenu 事 件 方 法 用 来 创 建 选 项 菜 单, 定 义 为 : public boolean oncreateoptionsmenu(menu menu) 通 过 Menu.add 方 法 可 添 加 一 个 选 项 菜 单, 该 方 法 有 四 种 重 载 形 式 public MenuItem add(int titleres) public MunuItem add(charsequence title) public MenuItem add(int groupid, int itemid, int order, int titleres) public MenuItem add(int groupid, int itemid, int order, CharSequence title) add 方 法 最 多 有 四 个 参 数, 参 数 含 义 为 groupid: 菜 单 项 的 分 组 ID itemid: 当 前 添 加 的 菜 单 项 ID order: 菜 单 显 示 顺 序 titleres 或 title: 菜 单 项 标 题 的 字 符 串 资 源 ID 或 字 符 串

带 图 像 的 选 项 菜 单 可 通 过 MenuItem 接 口 的 相 关 方 法 设 置 与 菜 单 项 相 关 的 内 容, 例 如, 为 某 菜 单 项 设 置 一 个 图 像 图 标 通 过 MenuItem.setIcon 方 法 可 以 为 菜 单 项 添 加 一 个 图 像 图 标 通 过 图 像 资 源 ID 装 载 图 像 public MenuItem seticon(int iconres) 通 过 Drawable 对 象 装 载 图 像 public MenuItem seticon(drawable icon)

菜 单 项 关 联 Activity 可 以 将 Activity 与 菜 单 项 相 互 关 联, 使 用 MenuItem.setIntent() 方 法 指 定 一 个 Intent 对 象 即 可 public MenuItem setintent(intent intent); 将 一 个 Activity 与 菜 单 项 关 联 后, 单 击 该 菜 单 项, 系 统 会 调 用 startactivity 方 法 显 示 与 菜 单 项 关 联 的 Activity MenuItem addmenuitem = menu.add(1,1,1, 添 加 ); addmenuitem.setintent(new Intent(this, AddActivity.class)); 注 意 : 如 果 设 置 了 菜 单 项 单 击 事 件, 并 且 事 件 返 回 true, 则 与 菜 单 项 关 联 的 Activity 将 失 效, 也 就 是 说, 系 统 调 用 单 击 事 件 方 法 后, 就 不 会 再 调 用 startactivity 方 法 显 示 与 菜 单 项 关 联 的 Activity 了

创 建 选 项 菜 单 示 例 public boolean oncreateoptionsmenu(menu menu) { MenuItem addmenuitem = menu.add(1, menuitemid++, 1, " 添 加 "); addmenuitem.setintent(new Intent(this, AddActivity.class)); MenuItem deletemenuitem = menu.add(1, menuitemid++, 2, " 删 除 "); deletemenuitem.seticon(r.drawable.delete); deletemenuitem.setonmenuitemclicklistener(this); MenuItem menuitem1 = menu.add(1, menuitemid++, 3, " 菜 单 1"); menuitem1.setonmenuitemclicklistener(this); MenuItem menuitem2 = menu.add(1, menuitemid++, 4, " 菜 单 2"); MenuItem menuitem3 = menu.add(1, menuitemid++, 4, " 菜 单 3"); MenuItem menuitem4 = menu.add(1, menuitemid++, 4, " 菜 单 4"); return super.oncreateoptionsmenu(menu); }

响 应 菜 单 的 单 击 动 作 调 用 MenuItem.setOnMenuItemClickListener 方 法 可 设 置 菜 单 项 单 击 事 件 ( 处 理 菜 单 项 单 击 事 件 的 类 必 须 实 现 onmenuitemclicklistener 接 口 ) 例 :public class Main extends Activity implements OnMenuItemClickListener,OnClickListener deletemenuitem.setonmenuitemclicklistener(this); @Override public boolean onmenuitemclick(menuitem item){ Log.d("onMenuItemClick", "true"); showdialog(item.gettitle().tostring()); return false; }

响 应 菜 单 的 单 击 动 作 使 用 Activity 类 的 onoptionsitemselected 和 onmenuitemselected 方 法 也 可 以 响 应 菜 单 项 的 单 击 事 件 public boolean onoptionsitemselected(menuitem item) public boolean onmenuitemselected(int featureid,menuitem item) 可 通 过 gettitle 或 者 getitemid 判 断 被 单 击 的 是 哪 一 个 菜 单 项 当 onmenuitemclick 方 法 返 回 true 时, 另 两 种 单 击 事 件 的 响 应 方 式 都 会 失 效 ; 如 果 未 设 置 菜 单 项 单 击 事 件, 而 同 时 使 用 了 另 外 两 种 单 击 事 件 响 应 方 式, 系 统 会 根 据 在 onmenuitemselected 方 法 中 调 用 父 类 (Activity) 的 onmenuitemselected 方 法 的 位 置 来 决 定 先 调 用 哪 个 方 法 来 响 应 菜 单 单 击 动 作

响 应 菜 单 的 单 击 动 作 注 : 在 如 下 方 法 中, 若 将 super.onmenuitemselected 方 法 放 在 log.d 之 后 调 用, 系 统 会 在 执 行 完 onmenuitemselected 方 法 后 再 调 用 onoptionsselected 方 法 public boolean onmenuitemselected(int featureid, MenuItem item) { super.onmenuitemselected(featureid, item); // 调 用 onoptionsselected 方 法 Log.d("onMenuItemSelected:itemId=", String.valueOf(item.getItemId())); if (" 菜 单 1".equals(item.getTitle())) showdialog("<" + item.gettitle().tostring() + ">"); else if (" 菜 单 2".equals(item.getTitle())) showdialog("<" + item.gettitle().tostring() + ">"); return false;} public boolean onoptionsitemselected(menuitem item){ Log.d("onOptionsItemSelected:itemid=", String.valueOf(item.getItemId())); return true;}

创 建 选 项 菜 单 示 例

动 态 添 加 修 改 和 删 除 选 项 菜 单 程 序 运 行 过 程 中 可 动 态 对 选 项 菜 单 进 行 处 理, 比 如 增 加 菜 单 项 修 改 菜 单 项 的 标 题 和 图 像 等, 关 键 是 获 得 描 述 选 项 菜 单 的 Menu 对 象 // 向 Activity 菜 单 添 加 5 个 菜 单 项, 菜 单 项 的 id 从 10 开 始 private Menu menu; private int menuitemid = Menu.FIRST; //Menu.FIRST=1 public void onclick(view view) { if (menu == null)return; for (int i = 10; i < 15; i++) { int id = menuitemid++; menu.add(1, id, id, " 菜 单 " + i); } } public boolean oncreateoptionsmenu(menu menu){ this.menu = menu; }

动 态 添 加 修 改 和 删 除 选 项 菜 单 示 例

带 复 选 框 和 选 项 按 钮 的 子 菜 单 传 统 子 菜 单 以 层 次 结 构 显 示,Android 子 菜 单 采 用 弹 出 式 显 示 方 式, 单 击 带 有 子 菜 单 的 菜 单 项 后, 父 菜 单 关 闭, 屏 幕 上 单 独 显 示 子 菜 单 Menu.addSubMenu 方 法 可 用 于 添 加 子 菜 单, 与 Menu.add 方 法 唯 一 的 区 别 是 返 回 值 不 同, 前 者 返 回 SubMenu 对 象, 后 者 返 回 MenuItem 对 象,SubMenu 和 MenuItem 是 平 级 的 子 菜 单 项 上 不 能 显 示 图 像, 但 可 以 带 复 选 框 和 选 项 按 钮 选 项 菜 单 不 支 持 嵌 套 子 菜 单, 不 能 在 子 菜 单 下 再 建 立 子 菜 单, 否 则 抛 出 异 常

带 复 选 框 和 选 项 按 钮 的 子 菜 单 private void addsubmenu(menu menu) { SubMenu filesubmenu = menu.addsubmenu(1, menuitemid++, 0, " 文 件 "); filesubmenu.seticon(r.drawable.file); filesubmenu.setheadericon(r.drawable.headerfile); MenuItem newmenuitem = filesubmenu.add(1, menuitemid++, 1, " 新 建 "); newmenuitem.setcheckable(true); // 设 置 复 选 框 类 型 newmenuitem.setchecked(true); // 选 中 复 选 框 MenuItem openmenuitem = filesubmenu.add(2, menuitemid++, 2, " 打 开 "); MenuItem exitmenuitem = filesubmenu.add(2, menuitemid++, 3, " 退 出 "); exitmenuitem.setchecked(true); // 设 置 选 项 按 钮 为 选 中 状 态 filesubmenu.setgroupcheckable(2, true, false); // 设 置 选 项 按 钮 // 第 一 个 参 数 指 定 子 菜 单 项 的 GroupId, 第 二 个 参 数 必 须 为 true, 如 果 第 三 个 参 数 为 false, 相 同 groupid 的 子 菜 单 项 会 被 设 置 成 复 选 框 效 果, 如 果 为 true, 相 同 groupid 的 子 菜 单 项 会 被 设 置 为 选 项 按 钮 效 果 }

带 复 选 框 和 选 项 按 钮 的 子 菜 单 示 例

上 下 文 菜 单 上 下 文 菜 单 可 以 和 任 意 View 关 联,TextView EditText 和 Button 等 控 件 都 可 以 关 联 上 下 文 菜 单, 上 下 文 菜 单 的 显 示 效 果 与 子 菜 单 类 似, 也 可 分 为 菜 单 头 和 菜 单 项, 上 下 文 菜 单 不 能 带 图 像, 但 可 以 带 复 选 框 和 选 项 按 钮 创 建 上 下 文 菜 单, 需 要 覆 盖 Activity.onCreateContextMenu 方 法, 可 使 用 ContextMenu.setHeaderTitle 和 ContextMenu.setHeaderIcon 设 置 上 下 文 菜 单 的 标 题 和 图 像, 上 下 文 菜 单 与 选 项 菜 单 一 样, 不 支 持 嵌 套 子 菜 单 上 下 文 菜 单 必 须 注 册 到 指 定 的 View 上 才 能 显 示, 注 册 上 下 文 菜 单 可 以 使 用 Activity.registerForContextMenu 当 一 个 控 件 关 联 上 下 文 后, 长 按 该 控 件, 就 会 显 示 上 下 文 菜 单, 上 下 文 菜 单 的 单 击 事 件 可 用 单 击 事 件 类 和 onmenuitemselected 方 法 响 应, 也 可 以 覆 盖 Activity.onContextItemSelected 方 法

上 下 文 菜 单 示 例

Activity 类 的 其 它 菜 单 事 件 public boolean onprepareoptionsmenu(menu menu), 在 显 示 选 项 菜 单 之 前 被 调 用, 一 般 用 来 修 改 即 将 显 示 的 选 项 菜 单 public void onoptionsmenuclosed(menu menu), 在 关 闭 选 项 菜 单 时 被 调 用 public void oncontextmenuclosed(menu menu), 在 关 闭 上 下 文 菜 单 时 被 调 用 public boolean onmenuopened(int featureid, Menu menu), 在 显 示 选 项 菜 单 之 前 被 调 用, 该 方 法 在 onprepareoptionsmenu 之 后 调 用

从 菜 单 资 源 中 装 载 菜 单 Android SDK 允 许 从 菜 单 资 源 中 装 载 菜 单, 所 有 菜 单 资 源 都 在 res/menu 目 录 下, 必 须 在 oncreateoptionsmenu 或 oncreatecontextmenu 方 法 中 装 载 菜 单 资 源 //file_menu.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title=" 新 建 " /> <item android:title=" 打 开 " /> <item android:title=" 退 出 " /> </menu> getmenuinflater().inflate(r.menu.file_menu, menu);

自 定 义 菜 单 通 过 onkeydown 事 件 方 法 和 PopupWindow 可 实 现 自 定 义 菜 单

自 定 义 菜 单 示 例 ( 菜 单 布 局 ) <LinearLayout android:id="@+id/home" android:orientation="vertical" android:background="@drawable/button_normal_translucent" android:layout_weight="1"> <ImageView android:src="@drawable/home" android:paddingtop="5dp" /> <TextView android:text=" 首 页 " android:gravity="center" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_weight="1" android:background="@drawable/button_normal" android:gravity="center"> <ImageView android:src="@drawable/mine" /> <TextView android:text=" 我 的 " /> </LinearLayout> <LinearLayout android:orientation="vertical" android:background="@drawable/button_normal" android:layout_weight="1"> <ImageView android:src="@drawable/more" android:paddingtop="18dp" /> <TextView android:text=" 更 多 " android:gravity="center" android:paddingtop="5dp"/> </LinearLayout>

自 定 义 菜 单 示 例 ( 按 键 事 件 ) public boolean onkeydown(int keycode, KeyEvent event) { switch (keycode){ case KeyEvent.KEYCODE_MENU: if (state == 1)return false; layout = getlayoutinflater().inflate(r.layout.menu_layout, null); pop = new PopupWindow(layout, getwindowmanager().getdefaultdisplay().getwidth(), getwindowmanager().getdefaultdisplay().getheight()); pop.showatlocation(layout, Gravity.BOTTOM, 0, 0); View home = layout.findviewbyid(r.id.home); home.setonclicklistener(new OnClickListener(){public void onclick(view view){ }}); state = 1; return false; case KeyEvent.KEYCODE_BACK: if (state == 1){pop.dismiss();state = 2;} // 关 闭 选 项 菜 单 else if (state == 2){finish();} // 关 闭 当 前 的 Activity return false; } return super.onkeydown(keycode, event);}

主 要 内 容 Android UI 布 局 图 形 控 件 常 用 的 XML 属 性 图 形 界 面 中 常 用 的 控 件 元 素 菜 单 对 话 框

对 话 框 专 题 用 AlertDialog 类 显 示 提 示 信 息 窗 Toast 提 示 信 息 窗 Notification 提 示 信 息 窗

双 按 钮 ( 确 认 / 取 消 ) 对 话 框 AlertDialog 无 public 构 造 方 法, 因 此 不 能 直 接 创 建 AlertDialog 对 象, 为 了 创 建 该 对 象, 需 要 使 用 Builder 类,Builder 类 是 在 AlertDialog 类 中 定 义 的 一 个 内 嵌 类 首 先 创 建 AlertDialog.Builder 对 象, 然 后 通 过 Builder.show() 方 法 显 示 对 话 框 ; 或 者 通 过 Builder.create 方 法 返 回 AlertDialog 对 象, 再 通 过 AlertDialog.show 方 法 显 示 对 话 框 setpositivebutton 和 setnegativebutton 用 于 创 建 对 话 框 按 钮, 其 第 二 个 参 数 类 型 是 android.content.dialoginterface.onclicklistener, 而 不 是 android.view.view.onclicklistener 用 show 方 法 显 示 对 话 框 属 异 步 操 作, 调 用 后 立 即 返 回, 代 码 继 续 执 行 ; 即 使 单 击 事 件 中 不 写 任 何 代 码, 单 击 按 钮 后, 对 话 框 也 会 关 闭

双 按 钮 ( 确 认 / 取 消 ) 对 话 框 示 例 public void oncreate(bundle savedinstancestate){ super.oncreate(savedinstancestate); setcontentview(r.layout.main); new AlertDialog.Builder(this).setIcon(R.drawable.question).setTitle(" 是 否 下 载 文 件 ").setpositivebutton(" 确 定 ",new DialogInterface.OnClickListener(){ public void onclick(dialoginterface dialog, int whichbutton){ new AlertDialog.Builder(Main.this).setMessage( 文 件 已 经 成 功 下 载."). create().show();} }).setnegativebutton(" 取 消 ",new DialogInterface.OnClickListener(){ public void onclick(dialoginterface dialog, int whichbutton){ new AlertDialog.Builder(Main.this).setMessage( " 您 已 经 选 择 了 取 消 按 钮, 该 文 件 未 被 下 载.").create().show();} }).show(); }

双 按 钮 ( 确 认 / 取 消 ) 对 话 框 示 例

三 按 钮 ( 确 认 / 忽 略 / 取 消 ) 对 话 框 setpositivebutton,setnegativebutton 和 setneutralbutton 的 调 用 次 序 可 以 是 任 意 的, 但 排 列 次 序 固 定 ( 确 认 / 忽 略 / 取 消 ), 使 用 方 法 与 双 按 钮 情 况 类 似

简 单 列 表 对 话 框 通 过 AlertDialog.Builder 类 的 setitems 方 法 可 以 创 建 简 单 列 表 对 话 框, 相 当 于 将 ListView 放 在 对 话 框 上, 然 后 在 ListView 中 添 加 若 干 简 单 文 本

简 单 列 表 对 话 框 示 例 private String[] provinces = new String[] { " 辽 宁 省 ", " 山 东 省 ", " 河 北 省 ", " 福 建 省 ", " 广 东 省 ", " 黑 龙 江 省 " }; public void oncreate(bundle savedinstancestate){ super.oncreate(savedinstancestate); setcontentview(r.layout.main); new AlertDialog.Builder(this).setTitle(" 选 择 省 份 ").setitems(provinces, new DialogInterface.OnClickListener(){ public void onclick(dialoginterface dialog, int which){ final AlertDialog ad = new AlertDialog.Builder(Main.this).setMessage( " 您 已 经 选 择 了 : " + which + ":" + provinces[which]).show(); android.os.handler hander = new android.os.handler(); hander.postdelayed(new Runnable(){ public void run(){ ad.dismiss();}}, 5 * 1000);// 延 迟 5 秒 调 用 run() 方 法 }}).show(); }

单 选 列 表 对 话 框 通 过 AlertDialog.Builder 类 的 setsinglechoiceitems 方 法 可 以 创 建 单 选 列 表 对 话 框, 可 从 资 源 文 件 (itemsid) 数 据 集 (cursor) 字 符 串 数 组 (items) 或 对 象 (ListAdapter) 中 装 载 数 据 setsinglechoiceitems(int itemsid, int checkeditem, final onclicklistener listener) setsinglechoiceitems(cursor cursor, int checkeditem,string lc, final onclicklistener listener) setsinglechoiceitems(charsequence[] items, int checkeditem, final onclicklistener listener) setsinglechoiceitems(listadapter adapter, int checkeditem, final onclicklistener listener) checkeditem 表 示 默 认 选 中 的 列 表 项 ;listener 表 示 单 击 某 个 列 表 项 时 被 触 发 的 事 件 对 象 ;lc(labelcolumn) 表 示 数 据 集 某 列 的 名 称, 该 列 数 据 将 被 加 载 到 列 表 项 中

单 选 列 表 对 话 框 示 例 public void onclick_singlechoicedialog(view view){ new AlertDialog.Builder(this).setTitle(" 选 择 省 份 ").setsinglechoiceitems(provinces, -1, new OnClickListener(){ public void onclick(dialoginterface dialog, int which){ index = which;} }).setpositivebutton(" 确 定 ", new OnClickListener(){ public void onclick(dialoginterface dialog, int which){ new AlertDialog.Builder(Main.this).setMessage( " 您 已 经 选 择 了 : " + index + ":" + provinces[index]).show(); } }).setnegativebutton(" 取 消 ", new OnClickListener(){ public void onclick(dialoginterface dialog, int which){ new AlertDialog.Builder(Main.this).setMessage(" 您 什 么 都 未 选 择.").show(); } }).show(); }

单 选 列 表 对 话 框 示 例

多 选 列 表 对 话 框 通 过 AlertDialog.Builder 类 的 setmultichoiceitems 方 法 可 以 创 建 多 选 列 表 对 话 框, 支 持 数 组 数 据 集 和 字 符 串 数 组 等 数 据 源 public Builder setmultichoiceitems(int itemsid, boolean[] checkeditems, final onmultichoiceclicklistener listener) public Builder setmultichoiceitems(cursor cursor, string ischeckedcolumn, string labelcolumn, final onmultichoiceclicklistener listener) public Builder setmultichoiceitems(charsequence[] items, boolean[] checkeditems, final onmultichoiceclicklistener listener) checkeditem 表 示 默 认 选 中 的 列 表 项 ;listener 表 示 单 击 某 个 列 表 项 时 被 触 发 的 事 件 对 象, 不 能 为 空, 否 则 无 法 设 置 列 表 项 选 中 状 态 ;labelcolumn 表 示 数 据 集 某 列 的 名 称, 该 列 数 据 将 被 加 载 到 列 表 项 中, ischeckedcolumn 用 于 指 定 数 据 集 的 一 列, 该 列 数 据 为 int 类 型, 为 1 表 示 选 中, 为 0 表 示 未 被 选 中

多 选 列 表 对 话 框 示 例 public void onclick_multichoicedialog(view view) { AlertDialog ad = new AlertDialog.Builder(this).setIcon(R.drawable.image).setTitle( 选 择 省 份 ).setmultichoiceitems(provinces, new boolean[] { false, true, false, true, false, false },new DialogInterface.OnMultiChoiceClickListener(){//listener 不 空 public void onclick(dialoginterface dialog,int whichbutton, boolean ischecked){} }).setpositivebutton(" 确 定 ", new DialogInterface.OnClickListener(){ public void onclick(dialoginterface dialog, int whichbutton){ int count = lv.getcount(); String s = " 您 选 择 了 :"; for (int i = 0; i < provinces.length; i++){ if (lv.getcheckeditempositions().get(i)) s += i + ":" + lv.getadapter().getitem(i)+ " ";} if (lv.getcheckeditempositions().size() > 0){ new AlertDialog.Builder(Main.this).setMessage(s).show();} else {new AlertDialog.Builder(Main.this).setMessage(" 您 未 选 择 任 何 省 份 ").show();} }}).setnegativebutton(" 取 消 ", null).create(); lv = ad.getlistview(); ad.show();}

多 选 列 表 对 话 框 示 例

进 度 对 话 框 通 过 android.app.progressdialog 类 实 现, 该 类 AlertDialog 的 子 类, 但 可 以 使 用 new 关 键 字 创 建 ProgressDialog 对 象 除 了 设 置 普 通 对 话 框 必 要 属 性 外, 还 需 要 设 置 进 度 最 大 值 当 前 进 度 和 递 增 进 度 量 public void setmax(int max) public void setprogress(int value) public void incrementprogressby(int diff)

登 录 对 话 框 几 乎 所 有 应 用 系 统 都 需 要 登 录 对 话 框, 以 便 输 入 登 录 ID 和 密 码, 可 以 采 用 与 创 建 Activity 同 样 的 方 法, 直 接 使 用 布 局 文 件 或 代 码 创 建 视 图 对 象, 并 将 这 些 视 图 对 象 添 加 到 对 话 框 中 可 以 使 用 AlertDialog.Builder.setView 方 法 将 视 图 对 象 添 加 到 当 前 的 对 话 框 中 new AlertDialog.Builder(this).setIcon(R.drawable.alert_dialog_icon).setTitle( 自 定 义 对 话 框 ).setview( ).show();

登 录 对 话 框 示 例 //login.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:text=" 用 户 名 :" android:textsize="20dp" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:text=" 密 码 :" android:textsize="20sp" /> <EditText android:password="true" /> </LinearLayout> public void onclick(view v) { LinearLayout loginlayout=(linearlayout) getlayoutinflater().inflate(r.layout.login, null); new AlertDialog.Builder(this).setIcon(R.drawable.login).setTitle(" 用 户 登 录 "). setview(loginlayout).setpositivebutton(" 登 录 ",new DialogInterface.OnClickListener(){ public void onclick(dialoginterface dialog,int whichbutton){} }).setnegativebutton(" 取 消 ",new DialogInterface.OnClickListener(){ public void onclick(dialoginterface dialog,int whichbutton){} }).show();}

登 录 对 话 框 示 例

控 制 对 话 框 对 话 框 的 默 认 属 性 有 时 并 不 能 完 全 满 足 应 用 的 需 求, 需 要 通 过 其 它 策 略 来 修 正 对 话 框 的 默 认 属 性, 实 现 对 对 话 框 的 灵 活 控 制, 主 要 的 控 制 方 式 包 括 如 下 几 个 方 面 阻 止 单 击 按 钮 关 闭 对 话 框 ( 分 析 AlertController, 用 反 射 技 术 实 现 ) 改 变 对 话 框 的 显 示 位 置 ( 重 设 window 的 Gravity 属 性 或 位 置 属 性 ) 在 对 话 框 按 钮 和 内 容 文 本 中 插 入 图 像 改 变 对 话 框 的 透 明 度

在 对 话 框 按 钮 和 内 容 文 本 插 入 图 像 AlertDialog alertdialog = new AlertDialog.Builder(this).setMessage( Html.fromHtml(" 哈 哈,<img src=''/> 你 好.", new ImageGetter(){ public Drawable getdrawable(string source){ Drawable drawable = getresources().getdrawable(r.drawable.face); drawable.setbounds(0, 0, 32, 32); return drawable;}}, null)).setpositivebutton( Html.fromHtml("<img src=''/> 确 定 ", new ImageGetter(){ public Drawable getdrawable(string source){ Drawable drawable = getresources().getdrawable(r.drawable.ok); drawable.setbounds(0, 0, 20, 20); return drawable;} }, null), null).setnegativebutton(html.fromhtml("<img src=''/> 取 消 ", new ImageGetter(){ public Drawable getdrawable(string source){ Drawable drawable = getresources().getdrawable(r.drawable.cancel); drawable.setbounds(0, 0, 20, 20); return drawable;} }, null), null).create(); alertdialog.show();

改 变 对 话 框 的 透 明 度 Window window = alertdialog.getwindow(); WindowManager.LayoutParams lp = window.getattributes(); lp.alpha = 0.7f; window.setattributes(lp); alertdialog.show();

Toast 信 息 提 示 框 Toast texttoast = Toast.makeText(this, 学 习 android 真 好!!",Toast.LENGTH_LONG); texttoast.show(); View view = getlayoutinflater().inflate(r.layout.toast, null); TextView textview = (TextView) view.findviewbyid(r.id.textview); textview.settext(" 今 天 的 天 气 真 好!\n 哈, 哈, 哈!"); Toast toast = new Toast(this); toast.setduration(toast.length_long); toast.setview(view); toast.show();

用 PopupWindows 模 拟 Toast View layout = getlayoutinflater().inflate(r.layout.toast, null); popupwindow = new PopupWindow(layout, 200, 100); popupwindow.settouchable(false); popupwindow.showatlocation(layout, Gravity.CENTER_HORIZONTAL, 20, 0);

在 状 态 栏 上 显 示 Notification (1) 通 过 getsystemservice 方 法 获 得 一 个 NotificationManager notificationmanager=(notificationmanager)getsystemservice(notification_service); (2) 创 建 一 个 Notification 对 象, 这 一 步 需 要 设 置 显 示 在 屏 幕 上 方 状 态 栏 的 通 知 消 息 通 知 消 息 前 方 的 图 像 资 源 ID 和 发 出 通 知 的 事 件 Notification notification = new Notification(resId,tickerText, System.currentTimeMillis()); (3) 创 建 一 个 PendingIntent 对 象, 由 Android 系 统 维 护, 应 用 关 闭 后, 该 对 象 仍 然 不 会 释 放 PendingIntent contentintent = PendingIntent.getActivity(this, 0, getintent(), 0); (4) 使 用 Notification 类 的 setlatesteventinfo 设 置 Notification 的 详 细 信 息 notification.setlatesteventinfo(this, contenttitle, contenttext,contentintent); (5) 使 用 NotificationManager 的 notify 方 法 显 示 Notification 消 息 notificationmanager.notify(id, notification);

The End