Windows Phone 8 比较 windows phone 7 来说有很多功能及性能上的提升例如支持多核 CUP、支持SD卡、多种分辨率、 显然WP7 WVGA - 480x800 的已经不能完全满足所用户的需求,很多用户喜欢大屏幕高分辨的手机,随着大屏手机的逐渐推出 WP8 也是支持大分辨率的屏幕【WXGA - 768x1280 和 720P - 720x1280】

之前跟大家提起过关于应用设配WP8多种分辨率的事情,但是可能还是有些同学不是很明白如何判断当前手机的分辨率以及如何让应用自适应当前的手机分辨率 今天我给大家详细的介绍一下。

Windows phone 8 支持的屏幕分辨率有三种如下:

其中我们可以清楚的看到 WVGA 和 WXGA的屏幕横宽比例都是 15:9 的,只有在720P 的情况下是 16:9 的这点要提醒大家有些应用或许就要对720P的情况进行特殊处理下 例如一些图片或者视频类的应用。

另外相信很多同学想实现全屏或者更改系统时间电量图标颜色 请使用 SystemTray 进行设置:

 

   
   
   
   
  1. void MainPage_Loaded(object sender, RoutedEventArgs e) 
  2.         { 
  3.             ProgressIndicator progress = new ProgressIndicator 
  4.             { 
  5.                 IsVisible = true
  6.                 IsIndeterminate = true
  7.                 Text = "Downloading details..." 
  8.             }; 
  9.             SystemTray.SetProgressIndicator(this, progress); 
  10.             SystemTray.BackgroundColor = System.Windows.Media.Colors.Red; 
  11.             SystemTray.ForegroundColor = System.Windows.Media.Colors.Blue; 
  12.             //SystemTray.IsVisible = false
  13.         } 

通过上面的方法就可以隐藏状态条 或 根据应用的样式来调整 Tray的样式,个人感觉比较实用在这里给大家介绍一下。

当然今天的重点还是多分辨率的支持 以下是实现一个 ResolutionHeper class 判断当前屏幕分辨率的方法:

   
   
   
   
  1. public enum Resolutions { WVGA, WXGA, HD720p }; 
  2.  
  3. public static class ResolutionHelper 
  4.    private static bool IsWvga 
  5.    { 
  6.       get 
  7.       { 
  8.          return App.Current.Host.Content.ScaleFactor == 100; 
  9.       } 
  10.    } 
  11.  
  12.    private static bool IsWxga 
  13.    { 
  14.       get  
  15.       {  
  16.          return App.Current.Host.Content.ScaleFactor == 160;  
  17.       } 
  18.    } 
  19.       
  20.    private static bool Is720p 
  21.    { 
  22.       get  
  23.       {  
  24.          return App.Current.Host.Content.ScaleFactor == 150;  
  25.       } 
  26.    } 
  27.  
  28.    public static Resolutions CurrentResolution 
  29.    { 
  30.       get 
  31.       { 
  32.          if (IsWvga) return Resolutions.WVGA; 
  33.          else if (IsWxga) return Resolutions.WXGA; 
  34.          else if (Is720p) return Resolutions.HD720p; 
  35.          else throw new InvalidOperationException("Unknown resolution"); 
  36.       } 
  37.    } 

上面这段代码是使用 System.Windows.Interop 中的

   
   
   
   
  1. public int ScaleFactor { get; } 

 The scale factor for the current application content area.

通过屏幕比例来判断屏幕分辨率。 

另外在不同分辨率的手机上需要使用相应的SplashScreenImage.jpg文件来完美适应屏幕的大小,否则系统将会自动缩放。

 

请参考MSDN:http://msdn.microsoft.com/en-us/library/windows/apps/ff769511(v=vs.105).aspx

另外XAML控件 需要自适应不同分辨率的手机 在设置控件的宽高时不使用绝对高度和宽度 使用自动“*”和“Auto” 以及 “80*” 这样的比例值来进行设置。

MSDN有一个DEMO CODE做的比较清楚感兴趣的同学可以拷贝下来自己试试很有意思:http://msdn.microsoft.com/en-us/library/windows/apps/jj206974(v=vs.105).aspx

以上就是获取和设置WP手机布局的一些技巧,欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick