2.3 不同平台设备的适配

Windows 10通用应用程序针对特定的平台还会有一个子API的集合,当我们要使用到某个平台的特定API的时候(比如手机相机硬件按钮触发事件),这时候就需要调用特定平台的API。因为Windows 10应用程序是一个安装包可以部署到所有的Windows 10系统平台的,所以这里就涉及到一个API适配的问题,对特定平台的API进行特殊处理。除了特定平台的API之外,还有一个适配的工作就是界面的适配,Windows 10也提供了一系列的API来给我们做界面的适配工作。

2.3.1 特定平台的API调用

目前在Windows 10里面有Windows Mobile Extension SDK和Windows Desktop Extension SDK两个扩展的SDK分别表示手机版本和桌面版本的扩展SDK,在书本的后面章节里面有用到特定平台的API都会进行区分标识。这两个SDK都是直接内置在Windows 10的开发SDK里面的,但是默认情况下不会给项目工程添加上,需要使用可以在项目工程里面进行引用,路径为(Project > Add Reference >Windows  Universal > Extensions)。在使用特定平台的API的时候,必须要进行判断当前的环境是否支持使用,否则不支持的平台调用将会引发异常。判断的方法为Windows.Foundation.Metadata.ApiInformation.IsTypePresent(String typeName),typeName表示带完整的命名空间的API的名称,返回true表示支持,返回false表示不支持。下面通过一个手机硬件后退键的适配来演示一下如果使用和适配特定平台的API。

首先创建一个Windows 10的通用应用程序项目,命名为BackButtonDemo,在项目里面引用Windows Mobile Extension SDK,如图2.12所示。

打开App.xaml.cs文件添加下面的代码:

代码清单2-2适配手机后退按钮(源代码:第2章\Examples_2_2)

App.xaml.cs文件部分代码
------------------------------------------------------------------------------------------------------------------
// 是否支持硬件后退键的标识
public static bool IsHardwareButtonsAPIPresent;
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
// 判断当前是否支持硬件后退键
IsHardwareButtonsAPIPresent =
Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");
if (IsHardwareButtonsAPIPresent)
// 添加后退键事件
Windows.Phone.UI.Input.HardwareButtons.BackPressed +=
HardwareButtons_BackPressed;
}
}
// 后退键事件,如果可以返回上一个页面则返回上一个页面
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
{
return;
}
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}

在项目中添加一个新的XAML页面BlankPage.xaml,如图2.13所示,在页面中增加顶部的后退按钮和隐藏显示逻辑,代码如下所示:

BlankPage.xaml文件部分代码
------------------------------------------------------------------------------------------------------------------
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel VerticalAlignment="Top" Orientation="Horizontal">
<Button x:Name="backButton" Margin="24,24,24,24" Click="backButton_Click" Style="{StaticResource NavigationBackButtonNormalStyle}"/>
<TextBlock Text="你好" FontSize="30" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Grid>
BlankPage.xaml.cs文件部分代码
------------------------------------------------------------------------------------------------------------------
public BlankPage1()
{
this.InitializeComponent();
if(App.IsHardwareButtonsAPIPresent)
{
backButton.Visibility = Visibility.Collapsed;
}
else
{
backButton.Visibility = Visibility.Visible;
}
}
// 后退按钮处理
private void backButton_Click(object sender, RoutedEventArgs e)
{
if(this.Frame.CanGoBack)
{
// 返回上一个页面
this.Frame.GoBack();
}
}

打开MainPage.xaml页面添加转到至BlankPage.xaml页面的逻辑,代码如下所示:

MainPage.xaml文件部分代码
------------------------------------------------------------------------------------------------------------------
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="跳转到新的页面" Click="Button_Click" VerticalAlignment="Center" HorizontalAlignment="Center"></Button>
</Grid>
MainPage.xaml.cs文件部分代码
------------------------------------------------------------------------------------------------------------------
private void Button_Click(object sender, RoutedEventArgs e)
{
// 从MainPage页面跳转到BlankPage1页面
this.Frame.Navigate(typeof(BlankPage1));
}

把程序部署到手机模拟器上,可以看到BlankPage.xaml页面顶部的后退按钮隐藏掉了,硬件后退键接管了后退的操作,如图2.14、2.15所示。把程序部署到本地PC上,可以看到BlankPage.xaml页面顶部的后退按钮显示出来了,如图2.16、2.17所示。

2.3.2 界面适配

Windows 10系统支持多种硬件平台和分辨率,Windows 10系统底层对界面的适配也是非常强大的,同样的控件在不同的硬件平台上显示也可能会有差异,这种适配就是由Windows 10 系统自己来完成适配,来匹配不同的硬件和分辨率的显示效果。虽然Windows 10底层完成了各种控件的适配,但是很多时候还是需要我们在程序里面来实现适配的。我们在开发通用程序的时候要充分地考虑到各种不同分辨率下的显示效果,可以通过可视化设计界面和各种分辨率的模拟器来进行测试。适配界面有几种常用的编程技巧(1)使用相对的布局控件来进行排列,如Grid、RelativePanel等;(2)使用相对的属性来设置控件在容器的位置,如orizontalAlignment、VerticalAlignment属性;(3)设置长度宽度的最大值最小值限制;(4)根据设备实际分辨率来设置长度宽度或者位置。详细的界面适配编程知识将会在布局的章节进行讲解。

本文来源于《深入浅出Windows 10通用应用开发》

源代码下载:http://vdisk.weibo.com/u/2186322691

目录:http://www.cnblogs.com/linzheng/p/5021428.html

欢迎关注我的微博@WP林政   微信公众号:wp开发(号:wpkaifa)

Windows10/WP技术交流群:284783431

[深入浅出Windows 10]不同平台设备的适配的更多相关文章

  1. 《深入浅出Windows 10通用应用开发》

        <深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...

  2. [深入浅出Windows 10]布局原理

    5.2 布局原理 很多时候在编写程序界面的时候都会忽略了应用布局的重要性,仅仅只是把布局看作是对UI元素的排列,只要能实现布局的效果就可以了,但是在实际的产品开发中这是远远不够的,你可能面临要实现的布 ...

  3. [深入浅出Windows 10]QuickCharts图表控件库解析

    13.4 QuickCharts图表控件库解析     QuickCharts图表控件是Amcharts公司提供的一个开源的图表控件库,这个控件库支持WPF.Silverlight.和Windows等 ...

  4. [深入浅出Windows 10]应用实战:Bing在线壁纸

    本章介绍一个使用Bing搜索引擎背景图接口实现的一个应用——Bing在线壁纸,讲解如何使用网络的接口来实现一个壁纸下载,壁纸列表展示和网络请求封装的内容.通过该例子我们可以学习到如何使用网络编程的知识 ...

  5. 如何解决Windows 10系统下设备的声音问题

    如何解决Windows 10系统下设备的声音问题? 请阅读下面的说明来解决Windows 10设备上的声音问题. 1. 检查设备管理器 打开开始菜单,键入设备管理器, 从出现的结果中选择并打开它. 在 ...

  6. [深入浅出Windows 10]模拟实现微信的彩蛋动画

    9.7 模拟实现微信的彩蛋动画 大家在玩微信的时候有没有发现节日的时候发一些节日问候语句如“情人节快乐”,这时候会出现很多爱心形状从屏幕上面飘落下来,我们这小节就是要模拟实现这样的一种动画效果.可能微 ...

  7. [深入浅出Windows 10]实现饼图控件

    13.2 实现饼图控件 上一小节讲解了动态生成折线图和区域图,对于简单的图形这样通过C#代码来生成的方式是很方便的,但是当我们的图表要实现更加复杂的逻辑的时候,这种动态生成的方式就显得力不从心了,那就 ...

  8. [深入浅出Windows 10]分屏控件(SplitView)

    4.18 分屏控件(SplitView) 分屏控件(SplitView)是Windows 10新增的控件类型,也是Windows 10通用应用程序主推的交互控件,通常和一个汉堡按钮搭配作为一种抽屉式菜 ...

  9. Windows 10 版本 1507 中的新 AppLocker 功能

    要查看 Windows 10 版本信息,使用[运行]> dxdiag  回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...

随机推荐

  1. CPU工作状态的知识介绍

    转自:http://www.bbwxbbs.com/forum.php?mod=viewthread&tid=2552   近几年,个人计算机的运行速度有了质的飞跃,但是功耗却没能与时俱进,着 ...

  2. HTML5学习之拖放(十)

    l元素可以用于拖拽必须设置draggable="true"属性,img和a标签除外,她们两个默认就可以被拖拽 想做拖拽处理,就需要在Dom元素上监听拖放的事件:dragstart, ...

  3. 在ubuntu上搭建开发环境4---ubuntu简单的搭建LAMP环境和配置

    最近重新安装了Ubuntu,但是之前的LAMP环境自然也就没有了,实在是不想再去编译搭建LAMP环境(这种方法实在是太费时间,而且太容易遇到各种不知道为什么的错误),所以,就去查查有没有什么简单的搭建 ...

  4. 排序练习【sdut 1582】【堆排序】

    排序 Time Limit: 1000ms   Memory limit: 32678K  有疑问?点这里^_^ 题目描述 给你N(N<=100)个数,请你按照从小到大的顺序输出. 输入 输入数 ...

  5. 异常:System.BadImageFormatException,未能加载正确的程序集XXX

    IDE:VS2015 语言:C# 异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项... 一般是由于目标程序的目标平台与其某一依赖项的目标编 ...

  6. hdu 1866 几个矩形面积的和 ***

    给出几个矩形,求出面积之和,相交区域只能算一次 一开始想用线段树求个并,后来发现没办法知道并了几次,然后就不会了 看了题解 本题其实很简单,但是想要想到转化也很不容易,因为本题是求面积之和,但是两个矩 ...

  7. 重新开始刷dp,哈哈哈

    转载于: http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2015年1月29日 从头开始

  8. 自己制作QQ空间音乐的具体方法

    1.打开QQ邮箱找到左栏下方的“文件中转站”--点击收藏文件--上传到收藏  将MP3或WMA音乐文件上传 上传完成点下载 下图:   2.点“保存”将最上面一排的地址全部复制  下图   3.为了更 ...

  9. Linux下常用命令

    1.判断桌面环境是Gnome还是KDE #update-alternatives --display x-session-manager

  10. MathType 常用快捷键

    MathType 数学公式编辑器是广大理科生电脑上必不可少的软件!然而在大量公式时,不会巧妙使用快捷键真的是心累身累.巧妙使用MathType数学公式编辑器可加快数学符号的录入速度和效率,这将节约大量 ...