[深刻淺出Windows 10]不一樣平臺設備的適配

2.3 不一樣平臺設備的適配

Windows 10通用應用程序針對特定的平臺還會有一個子API的集合,當咱們要使用到某個平臺的特定API的時候(好比手機相機硬件按鈕觸發事件),這時候就須要調用特定平臺的API。由於Windows 10應用程序是一個安裝包能夠部署到全部的Windows 10系統平臺的,因此這裏就涉及到一個API適配的問題,對特定平臺的API進行特殊處理。除了特定平臺的API以外,還有一個適配的工做就是界面的適配,Windows 10也提供了一系列的API來給咱們作界面的適配工做。html

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所示,在頁面中增長頂部的後退按鈕和隱藏顯示邏輯,代碼以下所示:this

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頁面的邏輯,代碼以下所示:spa

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.1四、2.15所示。把程序部署到本地PC上,能夠看到BlankPage.xaml頁面頂部的後退按鈕顯示出來了,如圖2.1六、2.17所示。設計

2.3.2 界面適配

Windows 10系統支持多種硬件平臺和分辨率,Windows 10系統底層對界面的適配也是很是強大的,一樣的控件在不一樣的硬件平臺上顯示也可能會有差別,這種適配就是由Windows 10 系統本身來完成適配,來匹配不一樣的硬件和分辨率的顯示效果。雖然Windows 10底層完成了各類控件的適配,可是不少時候仍是須要咱們在程序裏面來實現適配的。咱們在開發通用程序的時候要充分地考慮到各類不一樣分辨率下的顯示效果,能夠經過可視化設計界面和各類分辨率的模擬器來進行測試。適配界面有幾種經常使用的編程技巧(1)使用相對的佈局控件來進行排列,如Grid、RelativePanel等;(2)使用相對的屬性來設置控件在容器的位置,如orizontalAlignment、VerticalAlignment屬性;(3)設置長度寬度的最大值最小值限制;(4)根據設備實際分辨率來設置長度寬度或者位置。詳細的界面適配編程知識將會在佈局的章節進行講解。3d

 

本文來源於《深刻淺出Windows 10通用應用開發》code

源代碼下載:http://vdisk.weibo.com/u/2186322691

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

歡迎關注個人微博@WP林政   微信公衆號:wp開發(號:wpkaifa)

Windows10/WP技術交流羣:284783431

相關文章
相關標籤/搜索