31天学会Windows Phone 7开发:设备方向

移动开发
本文是“Windows Phone 7开发31日谈”系列的第四篇文章,本文我们聚焦另一个硬件特性:设备方向。

上一篇我们讨论了Windows Phone的一个专用硬件按钮——返回键。本文我们聚焦另一个硬件特性:设备方向。

纵向和横向

这两个术语区别并不太明显,纵向是设备的垂直方向,横向是水平方向。这两种方向在Windows Phone 7中都支持,但默认情况下,Silverlight程序以纵向开始,XNA程序以横向开始(游戏通常在宽屏下表现会更好)。本篇文章中,我们只讨论Silverlight程序,以及方向改变后如何去做,因为在用户使用程序时方向的变化是不可避免的。

默认项目是“只支持纵向的”

如果你看一下MainPage.xaml文件的头部信息,会发现两个属性:

SupportedOrientations="Portrait" Orientation="Portrait"

可以将SupportedOrientations想象成你准备在程序中支持的可能发生的情况的列表。你可以将SupportedOrientations设置成以下3个值中的任意一个:

◆Portrait (默认值)

◆Landscape

◆PortraitOrLandscape

Orientation属性是让你的程序在启动时以何种方式呈现。它有更多的值可选,但记住如果想要以横向模式启动,你需要将横向包含到SupportedOrientations中。下面是Orientation值的列表:

◆Landscape

◆LandscapeLeft (将电话向左翻转,头部在左)

◆LandscapeRight (将电话向右翻转,头部在右)

◆Portrait

◆PortraitDown (正常的竖直方向)

◆PortraitUp (倒置)

你可以看到在上表中不仅可以指定纵向或横向,还可以指定这些方向的排列方式。这允许你用你喜欢的方向开始你的应用程序。

改变方向

有两种方式可以改变设备的方向。***将SupportedOrientation设置为“PortraitOrLandscape”让操作系统为你实现。在大多数情况下,并不推荐这样做,因为你的应用程序界面可能不再适应屏幕了。第二种方式是通过代码实现。我们来看一个例子。

这个简单的界面占据了整个竖直方向的屏幕。

实例界面 

实例界面

你可以看到在横向时,很多按钮不在屏幕之中。这不是理想的用户体验。简单解决方法是去掉标题。我确信我们的用户可以看出这是一个计算器。我们可以对按钮进行重新布局,如果对于程序来说有意义,那就去做!本篇文章的目的是告诉你如何改变你的程序,而不是告诉你应该改变什么。我用了以下的代码来使标题栏消失和重现(这是MainPage.xaml.cs文件的全部内容):

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12. using Microsoft.Phone.Controls;  
  13.  
  14. namespace Day4_DeviceOrientation  
  15. {  
  16.     public partial class MainPage : PhoneApplicationPage  
  17.     {  
  18.         // Constructor  
  19.         public MainPage()  
  20.         {  
  21.             InitializeComponent();  
  22.             this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(MainPage_OrientationChanged);  
  23.         }  
  24.  
  25.         void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)  
  26.         {  
  27.             if ((e.Orientation == PageOrientation.LandscapeRight) || (e.Orientation == PageOrientation.LandscapeLeft))  
  28.             {  
  29.                 TitlePanel.Visibility = Visibility.Collapsed;  
  30.             }  
  31.             else if ((e.Orientation == PageOrientation.PortraitDown) || (e.Orientation == PageOrientation.PortraitUp))  
  32.             {  
  33.                 TitlePanel.Visibility = Visibility.Visible;  
  34.             }  
  35.         }  
  36.     }  

 

因为我只关注程序是横向还是纵向(而不是所有的方向),所以同时检测这两个状态并相应地调整界面。你可以将每种情况分开处理使界面看起来不同。

注意我为OrientationChanged事件创建的处理程序。这是一个在方向改变时最简单的识别方法,通常你可以使用将在第11篇文章介绍的加速感应器。看一下使用新代码后最终的例子:

实例界面

下载示例代码

原作者:Jeff Blankenburg    译者:金山崟霸

中文来源:http://www.cnblogs.com/porscheyin/archive/2010/11/21/1883533.html

英文来源:http://www.jeffblankenburg.com/2010/10/04/31-days-of-windows-phone-day-4-device-orientation/

【编辑推荐】

  1. 31天学会Windows Phone 7开发:项目模板
  2. 31天学会Windows Phone 7开发:页面间导航
  3. 31天学会Windows Phone 7开发:返回键
责任编辑:王晓东 来源: 博客园
相关推荐

2012-06-13 13:01:57

Windows Pho

2012-08-02 10:16:39

Windows Pho

2012-06-11 13:08:10

Windows Pho

2012-08-01 10:26:33

Windows Pho

2012-06-25 16:14:26

Windows Pho

2012-08-16 11:31:30

Windows Pho

2012-08-09 13:39:22

Windows Pho

2012-08-13 09:56:45

Windows Pho

2012-06-06 13:48:34

Windows Pho

2012-07-24 10:15:34

Windows Pho

2012-06-19 09:31:53

Windows Pho

2012-06-07 09:33:13

Windows Pho

2012-06-20 10:21:50

Windows Pho

2012-07-13 14:41:12

2012-06-21 10:59:31

Windows Pho

2012-07-11 09:21:35

Windows Pho

2012-07-31 09:44:27

Windows Pho

2012-06-29 14:13:10

2013-04-19 16:52:24

Windows PhoWindows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho
点赞
收藏

51CTO技术栈公众号