[深入浅出Windows 10]不同平台设备的适配
2.3 不同平臺(tái)設(shè)備的適配
Windows 10通用應(yīng)用程序針對(duì)特定的平臺(tái)還會(huì)有一個(gè)子API的集合,當(dāng)我們要使用到某個(gè)平臺(tái)的特定API的時(shí)候(比如手機(jī)相機(jī)硬件按鈕觸發(fā)事件),這時(shí)候就需要調(diào)用特定平臺(tái)的API。因?yàn)閃indows 10應(yīng)用程序是一個(gè)安裝包可以部署到所有的Windows 10系統(tǒng)平臺(tái)的,所以這里就涉及到一個(gè)API適配的問題,對(duì)特定平臺(tái)的API進(jìn)行特殊處理。除了特定平臺(tái)的API之外,還有一個(gè)適配的工作就是界面的適配,Windows 10也提供了一系列的API來給我們做界面的適配工作。
2.3.1 特定平臺(tái)的API調(diào)用
目前在Windows 10里面有Windows Mobile Extension SDK和Windows Desktop Extension SDK兩個(gè)擴(kuò)展的SDK分別表示手機(jī)版本和桌面版本的擴(kuò)展SDK,在書本的后面章節(jié)里面有用到特定平臺(tái)的API都會(huì)進(jìn)行區(qū)分標(biāo)識(shí)。這兩個(gè)SDK都是直接內(nèi)置在Windows 10的開發(fā)SDK里面的,但是默認(rèn)情況下不會(huì)給項(xiàng)目工程添加上,需要使用可以在項(xiàng)目工程里面進(jìn)行引用,路徑為(Project > Add Reference >Windows ?Universal > Extensions)。在使用特定平臺(tái)的API的時(shí)候,必須要進(jìn)行判斷當(dāng)前的環(huán)境是否支持使用,否則不支持的平臺(tái)調(diào)用將會(huì)引發(fā)異常。判斷的方法為Windows.Foundation.Metadata.ApiInformation.IsTypePresent(String typeName),typeName表示帶完整的命名空間的API的名稱,返回true表示支持,返回false表示不支持。下面通過一個(gè)手機(jī)硬件后退鍵的適配來演示一下如果使用和適配特定平臺(tái)的API。
??? 首先創(chuàng)建一個(gè)Windows 10的通用應(yīng)用程序項(xiàng)目,命名為BackButtonDemo,在項(xiàng)目里面引用Windows Mobile Extension SDK,如圖2.12所示。
打開App.xaml.cs文件添加下面的代碼:
代碼清單2-2:適配手機(jī)后退按鈕(源代碼:第2章\Examples_2_2)
App.xaml.cs文件部分代碼 ------------------------------------------------------------------------------------------------------------------// 是否支持硬件后退鍵的標(biāo)識(shí)public static bool IsHardwareButtonsAPIPresent;public App(){this.InitializeComponent();this.Suspending += OnSuspending;// 判斷當(dāng)前是否支持硬件后退鍵IsHardwareButtonsAPIPresent =Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");if (IsHardwareButtonsAPIPresent)// 添加后退鍵事件Windows.Phone.UI.Input.HardwareButtons.BackPressed +=HardwareButtons_BackPressed;}}// 后退鍵事件,如果可以返回上一個(gè)頁面則返回上一個(gè)頁面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;}}在項(xiàng)目中添加一個(gè)新的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){// 返回上一個(gè)頁面this.Frame.GoBack();}}? ??打開MainPage.xaml頁面添加轉(zhuǎn)到至BlankPage.xaml頁面的邏輯,代碼如下所示:
MainPage.xaml文件部分代碼 ------------------------------------------------------------------------------------------------------------------<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><Button Content="跳轉(zhuǎn)到新的頁面" Click="Button_Click" VerticalAlignment="Center" HorizontalAlignment="Center"></Button></Grid> MainPage.xaml.cs文件部分代碼 ------------------------------------------------------------------------------------------------------------------private void Button_Click(object sender, RoutedEventArgs e) {// 從MainPage頁面跳轉(zhuǎn)到BlankPage1頁面this.Frame.Navigate(typeof(BlankPage1));}? ??把程序部署到手機(jī)模擬器上,可以看到BlankPage.xaml頁面頂部的后退按鈕隱藏掉了,硬件后退鍵接管了后退的操作,如圖2.14、2.15所示。把程序部署到本地PC上,可以看到BlankPage.xaml頁面頂部的后退按鈕顯示出來了,如圖2.16、2.17所示。
2.3.2 界面適配
Windows 10系統(tǒng)支持多種硬件平臺(tái)和分辨率,Windows 10系統(tǒng)底層對(duì)界面的適配也是非常強(qiáng)大的,同樣的控件在不同的硬件平臺(tái)上顯示也可能會(huì)有差異,這種適配就是由Windows 10 系統(tǒng)自己來完成適配,來匹配不同的硬件和分辨率的顯示效果。雖然Windows 10底層完成了各種控件的適配,但是很多時(shí)候還是需要我們?cè)诔绦蚶锩鎭韺?shí)現(xiàn)適配的。我們?cè)陂_發(fā)通用程序的時(shí)候要充分地考慮到各種不同分辨率下的顯示效果,可以通過可視化設(shè)計(jì)界面和各種分辨率的模擬器來進(jìn)行測(cè)試。適配界面有幾種常用的編程技巧(1)使用相對(duì)的布局控件來進(jìn)行排列,如Grid、RelativePanel等;(2)使用相對(duì)的屬性來設(shè)置控件在容器的位置,如orizontalAlignment、VerticalAlignment屬性;(3)設(shè)置長(zhǎng)度寬度的最大值最小值限制;(4)根據(jù)設(shè)備實(shí)際分辨率來設(shè)置長(zhǎng)度寬度或者位置。詳細(xì)的界面適配編程知識(shí)將會(huì)在布局的章節(jié)進(jìn)行講解。
?
本文來源于《深入淺出Windows 10通用應(yīng)用開發(fā)》
源代碼下載:http://vdisk.weibo.com/u/2186322691
目錄:http://www.cnblogs.com/linzheng/p/5021428.html
歡迎關(guān)注我的微博@WP林政?? 微信公眾號(hào):wp開發(fā)(號(hào):wpkaifa)
Windows10/WP技術(shù)交流群:284783431
?
轉(zhuǎn)載于:https://www.cnblogs.com/linzheng/p/5021481.html
總結(jié)
以上是生活随笔為你收集整理的[深入浅出Windows 10]不同平台设备的适配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gets scanf以及缓冲区域的问题
- 下一篇: 删除元素(LintCode)