[深入浅出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)根據設備實際分辨率來設置長度寬度或者位置。詳細的界面適配編程知識將會在布局的章節進行講解。
?
本文來源于《深入淺出Windows 10通用應用開發》
源代碼下載:http://vdisk.weibo.com/u/2186322691
目錄:http://www.cnblogs.com/linzheng/p/5021428.html
歡迎關注我的微博@WP林政?? 微信公眾號:wp開發(號:wpkaifa)
Windows10/WP技術交流群:284783431
?
轉載于:https://www.cnblogs.com/linzheng/p/5021481.html
總結
以上是生活随笔為你收集整理的[深入浅出Windows 10]不同平台设备的适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gets scanf以及缓冲区域的问题
- 下一篇: 删除元素(LintCode)