博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Developer Day - Adaptive Cards
阅读量:7080 次
发布时间:2019-06-28

本文共 6416 字,大约阅读时间需要 21 分钟。

概述

Windows Developer Day 在 Modern Application Experience 环节展示了一种可以让开发者以更通用和统一的方式来对卡片对展示和交互的方式,那就是:Adaptive Cards.

早在 Microsoft Build 2017,Matt Hidinger 就对 Adaptive Cards 做了展示。

而在 WDD 前夕,Adaptive Cards 1.0 版本正式 Release,开源在官网文档在 .

 

基本原理 

那么 Adaptive Cards 是怎么工作的呢?

  • 卡片的制作者使用 JSON 或 SDK 中类构建的方式来描述卡片内容,包括文本,按钮,图片,链接等;
  • 卡片内容在宿主程序中完成渲染,宿主程序样式也是 JSON 或 SDK 类构建方式,样式包括内容大小,颜色等的定义;
  • 因为卡片的内容准备和 UI 渲染都可以完全通过 JSON 方式定义,所以使用 Adaptive Cards 各平台 SDK,就可以使用一套 JSON 完成多平台的通用和统一;

这种实现方式和 Adaptive Cards 要实现的目标也是一致的:

The goals for adaptive cards are:

. Portable - To any app, device, and UI framework

. Open - Libraries and schema are open source and shared

. Low cost - Easy to define, easy to consume

. Expressive - Targeted at the long tail of content that developers want to produce

. Purely declarative - No code is needed or allowed

. Automatically styled - To the Host application UX and brand guidelines

 

开发体验

多平台 SDK 支持

因为 Adaptive Cards 是一种跨平台方案,所以官方提供了 JavaScript,Android,iOS,UWP 和 .NET 五种常用的原生 SDK 来实现集成。

Install Adaptive Cards SDK

Platform Install Build Docs
 JavaScript
 .NET
 .NET WPF
 .NET HTML
 Windows UWP
 Android
 iOS

 

 

 

 

 

 

 

 

 

而目前  Adaptive Cards 支持的平台:

  • 已经在线可用的:Bot Framework - WebChat,Cortana Skills,Windows Timeline
  • 还在预览状态的:Skype,Outlook,Microsoft Teams,Windows Notifications,Bot Framework - Other Channels

UWP 示例开发

1. 通过 Nuget 方式在 PM 中添加包:

Install-Package AdaptiveCards.Rendering.Uwp -Version 1.0.0

2. 实例化一个 Renderer,这个 Renderer 被用来渲染宿主配置信息和卡片内容:

using AdaptiveCards.Rendering.Uwp;...var renderer = new AdaptiveCardRenderer();

3. 为卡片设置宿主配置:

示例中我使用一个 ComboBox 来切换宿主配置,从不同的文本文件读取对应的 JSON 字符串,反序列化为 HostConfig 并赋值给 Renderer。

string configJson = await getCardString(string.Format(@"Assets\{0}", (hostConfigBox.SelectedItem as ComboBoxItem).Content.ToString()));var hostConfig = AdaptiveHostConfig.FromJsonString(configJson);renderer.HostConfig = hostConfig.HostConfig;

4. 设置卡片内容:

示例中我从文本文件中读取内容对应的 JSON 字符串,反序列化为 AdaptiveCard 类实例。

string cardJson = await getCardString(@"Assets\card.txt");var card = AdaptiveCard.FromJsonString(cardJson).AdaptiveCard;RenderedAdaptiveCard renderResult = renderer.RenderAdaptiveCard(card);

5. 在界面中显示卡片:

把卡片内容显示在界面的 Grid 中,每次显示时,先清空前面的显示内容。

if (renderResult.FrameworkElement != null){    var uiCard = renderResult.FrameworkElement;    uiCard.HorizontalAlignment = HorizontalAlignment.Left;    cardGrid.Children.Clear();    cardGrid.Children.Add(uiCard);}

来看看运行的效果:

可以看到,使用同样的卡片内容,在切换不同的宿主配置 Skype 和 Microsoft Teams 时,对应的卡片渲染后的 UI 是不同的,也是符合各自宿主 UI 风格的。

UWP SDK 的使用过程基本就是这样,非常的简单易上手。我们来看一下中间两个重要的类:AdaptiveCard 和 AdaptiveHostConfig.

AdaptiveCard:

这个类里,我们看到了我们用到 FromJson 方法,以及一些主要属性:Version(用于标识更新版本),Speak (表示卡片的朗读内容),FallbackText(后备文本),BackgroundImage(卡片背景图片),Actions(按钮的操作集合)等。

#region 程序集 AdaptiveCards.Rendering.Uwp, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime// C:\Users\123\.nuget\packages\AdaptiveCards.Rendering.Uwp\1.0.0\lib\uap10.0\AdaptiveCards.Rendering.Uwp.winmd#endregionusing System;using System.Collections.Generic;using Windows.Data.Json;using Windows.Foundation.Metadata;namespace AdaptiveCards.Rendering.Uwp{    [Activatable(167772162)]    [Static(typeof(IAdaptiveCardStatics), 167772162)]    [Version(167772162)]    public sealed class AdaptiveCard : IAdaptiveCard    {        public AdaptiveCard();        public JsonObject ToJson();        [Overload("FromJson")]        public static AdaptiveCardParseResult FromJson(JsonObject adaptiveJson);        [Overload("FromJsonWithParserRegistration")]        public static AdaptiveCardParseResult FromJson(JsonObject adaptiveJson, AdaptiveElementParserRegistration elementRegistration, AdaptiveActionParserRegistration actionRegistration);        [Overload("FromJsonString")]        public static AdaptiveCardParseResult FromJsonString(string adaptiveJson);        [Overload("FromJsonStringWithParserRegistration")]        public static AdaptiveCardParseResult FromJsonString(string adaptiveJson, AdaptiveElementParserRegistration elementRegistration, AdaptiveActionParserRegistration actionRegistration);        public string Version { get; set; }        public ContainerStyle Style { get; set; }        public string Speak { get; set; }        public string FallbackText { get; set; }        public Uri BackgroundImage { get; set; }        public IList
Actions { get; } public IList
Body { get; } public ElementType ElementType { get; } }}

而针对 AdaptiveCard 的格式, 完整的说明文档可以在官方文档的 Card Schema 中看到:

对应上面的示例,我们使用的 JSON 文件大致组成如下:

 

AdaptiveHostConfig:

这里类里,我们看到了我们用到的 FromJson 方法,以及设置宿主样式的配置信息,如字体,文字大小,按钮操作,文字间距等样式配置。大家也可以再去具体看每个配置都有哪些枚举值可用。

#region 程序集 AdaptiveCards.Rendering.Uwp, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime// C:\Users\123\.nuget\packages\AdaptiveCards.Rendering.Uwp\1.0.0\lib\uap10.0\AdaptiveCards.Rendering.Uwp.winmd#endregionusing Windows.Data.Json;using Windows.Foundation.Metadata;namespace AdaptiveCards.Rendering.Uwp{    [Activatable(167772162)]    [Static(typeof(IAdaptiveHostConfigStatics), 167772162)]    [Version(167772162)]    public sealed class AdaptiveHostConfig : IAdaptiveHostConfig    {        public AdaptiveHostConfig();        public static AdaptiveHostConfigParseResult FromJsonString(string hostConfigJson);        public static AdaptiveHostConfigParseResult FromJson(JsonObject hostConfigJson);        public bool SupportsInteractivity { get; set; }        public AdaptiveSpacingConfig Spacing { get; set; }        public AdaptiveSeparatorConfig Separator { get; set; }        public AdaptiveImageSizesConfig ImageSizes { get; set; }        public AdaptiveImageSetConfig ImageSet { get; set; }        public AdaptiveImageConfig Image { get; set; }        public AdaptiveFontWeightsConfig FontWeights { get; set; }        public AdaptiveFontSizesConfig FontSizes { get; set; }        public string FontFamily { get; set; }        public AdaptiveFactSetConfig FactSet { get; set; }        public AdaptiveContainerStylesDefinition ContainerStyles { get; set; }        public AdaptiveCardConfig AdaptiveCard { get; set; }        public AdaptiveActionsConfig Actions { get; set; }    }}

而针对 AdaptiveHostConfig 的字段, 完整的说明文档可以在官方文档的 Card Schema 中看到:

对应上面的示例,我们使用的 JSON 文件大致组成如下:

 

 

如果大家想简单体验一下 AdaptiveCard 和 AdaptiveHostConfig 的变化对卡片的影响,不想自己写 Demo,也可以通过它提供的在线体验的方式:

通过这个在线编辑器,可以很直观的看到每个字段的修改对卡片的影响。

 

对 Adaptive Cards 的简单体验和示例就到这里,后面如果产品代码中实际用到,我会再结合实际场景来具体展开分析,谢谢大家! 

 

转载地址:http://ogdml.baihongyu.com/

你可能感兴趣的文章
阿里巴巴收购以色列VR公司,大厂死磕VR为哪般?
查看>>
使用Xamarin实现跨平台移动应用开发
查看>>
webpack-dev-server 热替换配置详解
查看>>
随机森林算法4种实现方法对比测试:DolphinDB速度最快,XGBoost表现最差
查看>>
架构设计复杂度的6个来源
查看>>
如何成功地在亚洲植入敏捷和DevOps
查看>>
银行建中台跟阿里建中台有什么不同?
查看>>
实现AGI还要多久?Hinton与AlphaGo之父这样回答
查看>>
Atlassian的Stash数据中心为Git提供了高可用性及可伸缩性
查看>>
Adaptive Execution让Spark SQL更高效更好用
查看>>
Swift 烧脑体操(五)- Monad
查看>>
中国在两年内赶超美国AI?李开复:不一定
查看>>
OpsRamp推出AIOps推理引擎
查看>>
C#未来新特性:静态委托和函数指针
查看>>
性能之巅:Linux网络性能分析工具
查看>>
Facebook曝至今最严重安全漏洞,超过5000万用户受影响
查看>>
简单介绍我的开源小工具:SanicDB
查看>>
我做SAP CRM One Order redesign的一些心得体会
查看>>
第二十二章:动画(十)
查看>>
个推微服务网关架构实践
查看>>