快速构建Windows 8风格应用34-构建Toast通知
原文:快速构建Windows 8风格应用34-构建Toast通知
引言
开发过WindowsPhone应用或者使用过WindowsPhone手机的开发者都知道,我们会收到一些应用的提示信息,这些提示信息出现在手机的上端,并且停留几秒钟后会自动消失,当然如果我们点击弹出的信息会自动运行相应的应用程序,这种提示信息我们叫做通知。
其实Windows 8 Store 应用也借鉴了Windows Phone上的提示信息,我们开发人员可以使自己应用程序在合适时间弹出相关提示信息,那么这些Windows 8 Store应用的提示信息,我们叫做Toast通知。
并且Toast通知样式可以自定义的。例如:
一、Toast通知概述
Toast 通知是在屏幕右上角(对于从右到左 (Right-To-Left) 方向位于左上角)显示的通知。
- Toast 通知可在应用上下文之外提供临时消息
- 用 toast 通知可立即吸引用户注意
- 用户可以永久关闭应用的 toast 通知
- 能够快速导航到应用中上下文相关的位置
- 很容易从应用本地或云端调用 toast 通知
Toast 通知使用与动态磁贴类似的模板架构体系,有丰富的展现形式可以选择。
更多关于Toast 通知概述可以参考:Toast 通知概述(Windows 应用商店应用) (Windows)
二、Toast通知构建
1,声明Toast通知功能
打开Package.appxmanifest应用清单文件,“应用程序UI”选项卡中找到“支持Toast通知”设置为“是”。
2,声明 Toast 通知背景色和文本颜色
我们可以为 Toast 通知设置背景颜色和浅色或深色文本。注意:该设置同时适用Toast 和磁贴通知背景以及文本颜色。
3,指定小徽标图像
应用的小徽标图像显示在每个 Toast 通知的右下角,让用户识别引发通知的应用。
4,添加命名空间声明
1: using Windows.UI.Notifications;
2: using Windows.Data.Xml.Dom;
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }5,为 Toast 选取一个模板并检索其 XML 内容
我们从系统提供的模板目录中选择一个适合的模板(详细的模板列表可参考 ToastTemplateType 枚举)。
注意:我们发送的每个单独的通知都可以使用不同的模板。
1: ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
2: XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
这里我使用的是ToastImageAndText01 模板,该模版样式如下:
6,为通知提供文本内容
我们可以首先检索模板中标记名称为“text”的所有元素。
ToastImageAndText01 模板只包含一个代码分配的文本字符串。该字符串最多可包含三行自动换行的字符串,因此我们应该相应地设置字符串的长度,以避免被截断。
1: XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
2: toastTextElements[0].AppendChild(toastXml.CreateTextNode("你好Windows 8!"));
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
7,为通知提供图像
我们可以首先检索模板中标记名称为“image”的所有元素。
与磁贴不同,Toast 模板(如 ToastImageAndText01)最多包含一个图像。
注意:并非所有 Toast 模板都包含图像,某些磁贴模板是仅文本的。
1: XmlNodeList toastImageAttributes = toastXml.GetElementsByTagName("image");
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
然后我们可以从应用的程序包、本地存储或从 Web 使用图像。注意:该图像大小小于 200 KB,小于 1024 x 1024 像素。
这里我以应用程序包的图像为例:
1: ((XmlElement)toastImageAttributes[0]).SetAttribute("src", "ms-appx:///Assets/SmallLogo.png");
2: ((XmlElement)toastImageAttributes[0]).SetAttribute("alt", "red graphic");
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
8,指定Toast 持续时间或者Toast 音频(非必要)
我们可以为Toast设置持续时间(仅有两个值:short和long),通常当我们的通知属于约会或者会议提醒之类的时候才使用“long”值。
注意:Toast持续时间默认为“short”。
1: IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
2: ((XmlElement)toastNode).SetAttribute("duration", "long");
另外我们也可以设置Toast音频,默认情况下Windows在播放通知时会播放一个简短的声音。同时我们可以选择使用系统提供的声音,也可以不使用任何声音。
由于模板中不包含 audio 元素,因此我们必须定义该元素,同时使用“ms-winsoundevent:”前缀指定声音文件。
1: IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
2: XmlElement audio = toastXml.CreateElement("audio");
指定非默认声音。
1: audio.SetAttribute("src", "ms-winsoundevent:Notification.IM");
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
定义 audio 元素之后,需要将其附加到 Toast 的 XML 负载中,作为 toast 元素的子元素。
1: toastNode.AppendChild(audio);
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
9,指定应用的启动参数
通常用户点击 Toast 通知时,相关应用应当会启动,并显示与该通知的内容相关的视图。
我们可以使用 Toast 元素的 launch 属性来实现该效果。
该属性提供一个在通过 Toast 启动应用时,从 Toast 传递到应用的字符串。此字符串没有任何特定形式,它由我们应用来定义。
我们的应用在每次被激活时必须检查作为参数形式的此字符串,并相应地调整它的视图或操作。例如:
1: ((XmlElement)toastNode).SetAttribute("launch", "{\"type\":\"toast\",\"param1\":\"12345\",\"param2\":\"67890\"}");
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
10,创建 Toast 通知并发送
1: ToastNotification toast = new ToastNotification(toastXml);
2: ToastNotificationManager.CreateToastNotifier().Show(toast);
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
最后运行效果可如下:
点击按钮后弹出Toast通知:
更多关于Toast通知资料可参考:
1,发送 Toast 通知(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用) (Windows)
快速构建Windows 8风格应用34-构建Toast通知的更多相关文章
- 快速构建Windows 8风格应用15-ShareContract构建
原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...
- 快速构建Windows 8风格应用13-SearchContract构建
原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格 ...
- 快速构建Windows 8风格应用32-构建辅助磁贴
原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...
- 快速构建Windows 8风格应用17-布局控件
原文:快速构建Windows 8风格应用17-布局控件 本篇博文主要介绍三种常用的布局控件:Canvas.Grid.StackPanel. Panel类是开发Windows 8 Store应用中一个重 ...
- 快速构建Windows 8风格应用14-ShareContract概述及原理
原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...
- 快速构建Windows 8风格应用9-竖直视图
原文:快速构建Windows 8风格应用9-竖直视图 本篇博文主要介绍竖直视图概览.关于竖直视图设计.如何构建竖直视图 竖直视图概览 Windows 8为了支持旋转的设备提供了竖屏视图,我们开发的应用 ...
- 快速构建Windows 8风格应用10-设备方向
原文:快速构建Windows 8风格应用10-设备方向 本篇博文主要介绍常用支持Windows 8操作系统设备的方向.如何获取当前设备方向.DisplayProperties类. 常用支持Window ...
- 快速构建Windows 8风格应用11-语义缩放
原文:快速构建Windows 8风格应用11-语义缩放 本篇博文主要介绍为什么需要语义缩放.什么是语义缩放.如何构建语义缩放. 为什么需要语义缩放 如果用过Windows 8系统的开发者都知道在Win ...
- 快速构建Windows 8风格应用12-SearchContract概述及原理
原文:快速构建Windows 8风格应用12-SearchContract概述及原理 本篇博文主要介绍Search Contract概述.Search Contract面板结构剖析.Search Co ...
随机推荐
- (插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。
近期 做些准备性得工作和有意思的事情.所以近期做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发人员 非常头疼的一件事,还有就是一些莫名得错误 ...
- Android Studio常见报错及处理办法
在Android Studio上点了update,系统自动升级,自动重启Android Studio后,以前的项目Gradle正常编译: Unable to start the daemon proc ...
- 自动注册 IIS6 的 MIME 类型
原文 自动注册 IIS6 的 MIME 类型 由于IIS5和IIS6有很多的MIME类型没有设置,其中还包括了FLV(video/x-flv),上篇文章描述了制作<IIS6 自动安装>,而 ...
- Spring3.0学习笔记文档的官方网站(六)--3.4.1
3.4 依靠 3.4.1 依赖注入 依赖注入两种方式:基于构造函数DI.基于setter方法DI. 3.4.1.1 基于构造函数DI 参数是引进一个对象的.和缺乏父母之前-子类关系: ...
- 每天进步一点点-->功能fseek() 使用方法
在阅读代码时,遇到了非常早之前用过的fseek(),非常久没实用了.有点陌生,写出来以便下次查阅. 函数功能是把文件指针指向文件的开头.须要包括头文件stdio.h fseek 函数名: fsee ...
- from声明
在整个应用程序,只有三行声明.这是最短单WIN32应用,但它的功能是非常有限,简单地显示一个消息框,示出来,其他什么事情也没有做.以下就来分析这三行语句了.别小看这三行语句.其实是隐藏着非常多知识点在 ...
- 【超酷超实用】CSS3可滑动跳转的分页插件制作教程
原文:[超酷超实用]CSS3可滑动跳转的分页插件制作教程 今天我要向大家分享一款很特别的CSS3分页插件,这款分页插件不仅可以点击分页按钮来实现分页,而且可以滑动滑杆来实现任意页面的跳转,看看都非常酷 ...
- 【Flume NG用户指南】(2)构造
作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处: http://blog.csdn.net/zhoubangtao/article/details ...
- 华为OJ: 公共字符串计算
有几个需要注意的地方,这个问题是不是大写和小写之间的区别.这样你就输入字符串大写或小写转换的计算前. 第二个,定要清晰.先将s1从[i]处開始与s2的[j]開始匹配,不相等则j++直到j等于s2.le ...
- 我的Linux学习历程:那些我看过的Linux书籍们
[+]查看原图http://www.ituring.com.cn/article/119401 来北京工作已经一个多月,大都市的生活比起读大学要忙碌得多,尤其是出行,基本以小时为基本的计时单位.有时茫 ...