31天學(xué)會Windows Phone 7開發(fā):設(shè)備方向
上一篇我們討論了Windows Phone的一個專用硬件按鈕——返回鍵。本文我們聚焦另一個硬件特性:設(shè)備方向。
縱向和橫向
這兩個術(shù)語區(qū)別并不太明顯,縱向是設(shè)備的垂直方向,橫向是水平方向。這兩種方向在Windows Phone 7中都支持,但默認情況下,Silverlight程序以縱向開始,XNA程序以橫向開始(游戲通常在寬屏下表現(xiàn)會更好)。本篇文章中,我們只討論Silverlight程序,以及方向改變后如何去做,因為在用戶使用程序時方向的變化是不可避免的。
默認項目是“只支持縱向的”
如果你看一下MainPage.xaml文件的頭部信息,會發(fā)現(xiàn)兩個屬性:
SupportedOrientations="Portrait" Orientation="Portrait"
可以將SupportedOrientations想象成你準(zhǔn)備在程序中支持的可能發(fā)生的情況的列表。你可以將SupportedOrientations設(shè)置成以下3個值中的任意一個:
◆Portrait (默認值)
◆Landscape
◆PortraitOrLandscape
Orientation屬性是讓你的程序在啟動時以何種方式呈現(xiàn)。它有更多的值可選,但記住如果想要以橫向模式啟動,你需要將橫向包含到SupportedOrientations中。下面是Orientation值的列表:
◆Landscape
◆LandscapeLeft (將電話向左翻轉(zhuǎn),頭部在左)
◆LandscapeRight (將電話向右翻轉(zhuǎn),頭部在右)
◆Portrait
◆PortraitDown (正常的豎直方向)
◆PortraitUp (倒置)
你可以看到在上表中不僅可以指定縱向或橫向,還可以指定這些方向的排列方式。這允許你用你喜歡的方向開始你的應(yīng)用程序。
改變方向
有兩種方式可以改變設(shè)備的方向。***將SupportedOrientation設(shè)置為“PortraitOrLandscape”讓操作系統(tǒng)為你實現(xiàn)。在大多數(shù)情況下,并不推薦這樣做,因為你的應(yīng)用程序界面可能不再適應(yīng)屏幕了。第二種方式是通過代碼實現(xiàn)。我們來看一個例子。
這個簡單的界面占據(jù)了整個豎直方向的屏幕。
你可以看到在橫向時,很多按鈕不在屏幕之中。這不是理想的用戶體驗。簡單解決方法是去掉標(biāo)題。我確信我們的用戶可以看出這是一個計算器。我們可以對按鈕進行重新布局,如果對于程序來說有意義,那就去做!本篇文章的目的是告訴你如何改變你的程序,而不是告訴你應(yīng)該改變什么。我用了以下的代碼來使標(biāo)題欄消失和重現(xiàn)(這是MainPage.xaml.cs文件的全部內(nèi)容):
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using System.Windows.Shapes;
- using Microsoft.Phone.Controls;
- namespace Day4_DeviceOrientation
- {
- public partial class MainPage : PhoneApplicationPage
- {
- // Constructor
- public MainPage()
- {
- InitializeComponent();
- this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(MainPage_OrientationChanged);
- }
- void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
- {
- if ((e.Orientation == PageOrientation.LandscapeRight) || (e.Orientation == PageOrientation.LandscapeLeft))
- {
- TitlePanel.Visibility = Visibility.Collapsed;
- }
- else if ((e.Orientation == PageOrientation.PortraitDown) || (e.Orientation == PageOrientation.PortraitUp))
- {
- TitlePanel.Visibility = Visibility.Visible;
- }
- }
- }
- }
因為我只關(guān)注程序是橫向還是縱向(而不是所有的方向),所以同時檢測這兩個狀態(tài)并相應(yīng)地調(diào)整界面。你可以將每種情況分開處理使界面看起來不同。
注意我為OrientationChanged事件創(chuàng)建的處理程序。這是一個在方向改變時最簡單的識別方法,通常你可以使用將在第11篇文章介紹的加速感應(yīng)器??匆幌率褂眯麓a后最終的例子:
原作者: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/
【編輯推薦】