[深入浅出Windows 10]不同平台设备的适配
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)根据设备实际分辨率来设置长度宽度或者位置。详细的界面适配编程知识将会在布局的章节进行讲解。
源代码下载:http://vdisk.weibo.com/u/2186322691
目录:http://www.cnblogs.com/linzheng/p/5021428.html
欢迎关注我的微博@WP林政 微信公众号:wp开发(号:wpkaifa)
Windows10/WP技术交流群:284783431
[深入浅出Windows 10]不同平台设备的适配的更多相关文章
- 《深入浅出Windows 10通用应用开发》
<深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...
- [深入浅出Windows 10]布局原理
5.2 布局原理 很多时候在编写程序界面的时候都会忽略了应用布局的重要性,仅仅只是把布局看作是对UI元素的排列,只要能实现布局的效果就可以了,但是在实际的产品开发中这是远远不够的,你可能面临要实现的布 ...
- [深入浅出Windows 10]QuickCharts图表控件库解析
13.4 QuickCharts图表控件库解析 QuickCharts图表控件是Amcharts公司提供的一个开源的图表控件库,这个控件库支持WPF.Silverlight.和Windows等 ...
- [深入浅出Windows 10]应用实战:Bing在线壁纸
本章介绍一个使用Bing搜索引擎背景图接口实现的一个应用——Bing在线壁纸,讲解如何使用网络的接口来实现一个壁纸下载,壁纸列表展示和网络请求封装的内容.通过该例子我们可以学习到如何使用网络编程的知识 ...
- 如何解决Windows 10系统下设备的声音问题
如何解决Windows 10系统下设备的声音问题? 请阅读下面的说明来解决Windows 10设备上的声音问题. 1. 检查设备管理器 打开开始菜单,键入设备管理器, 从出现的结果中选择并打开它. 在 ...
- [深入浅出Windows 10]模拟实现微信的彩蛋动画
9.7 模拟实现微信的彩蛋动画 大家在玩微信的时候有没有发现节日的时候发一些节日问候语句如“情人节快乐”,这时候会出现很多爱心形状从屏幕上面飘落下来,我们这小节就是要模拟实现这样的一种动画效果.可能微 ...
- [深入浅出Windows 10]实现饼图控件
13.2 实现饼图控件 上一小节讲解了动态生成折线图和区域图,对于简单的图形这样通过C#代码来生成的方式是很方便的,但是当我们的图表要实现更加复杂的逻辑的时候,这种动态生成的方式就显得力不从心了,那就 ...
- [深入浅出Windows 10]分屏控件(SplitView)
4.18 分屏控件(SplitView) 分屏控件(SplitView)是Windows 10新增的控件类型,也是Windows 10通用应用程序主推的交互控件,通常和一个汉堡按钮搭配作为一种抽屉式菜 ...
- Windows 10 版本 1507 中的新 AppLocker 功能
要查看 Windows 10 版本信息,使用[运行]> dxdiag 回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...
随机推荐
- AXURE在原型设计中的应用
转: http://uedc.163.com/2248.html 前言 什么是原型呢? 产品原型简单的说就是产品设计成形之前的一个简单框架,对网站来讲,就是将页面模块.元素进行粗放式的排版和布局,深入 ...
- Windows 10 周年更新正式版下载 + win10 快捷键
Windows 10 周年更新正式版 360云资源总汇(施工中): https://yunpan.cn/c6Svi7Az52XBs (提取码:e5dd)今后提到周年更新版.1607版或RS1版,都是 ...
- Oracle锁定和解锁用户的命令
转:http://database.51cto.com/art/200910/158576.htm 在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用 ...
- SQL常用方言列表
DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hi ...
- 手机WEB自适应头部代码
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...
- x264中I,P,B帧和PTS,DTS的关系
转自:http://www.cppblog.com/tx7do/archive/2013/01/30/197633.html 基本概念: I frame :帧内编码帧 又称intra picture, ...
- 用计算器计算“异或CRC”
再计算器上输入以下数字,每输入一个数字,按一下“Xor”
- Boost练习程序(multi_index_container)
代码来自:http://blog.csdn.net/whuqin/article/details/8482547 该容器能实现多列索引,挺好. #include <string> #inc ...
- 彻底删除Kafka中的topic
1.删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录 2.Kafka 删除topic ...
- AJAX案例四:省市联动
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...