BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Dzień 4 - "31 Days with Windows Phone"

08-11-2011 08:00 | Łukasz Arciszewski
W tym artykule opisywać będę reagowanie na zmianę orientacji telefonu. Jest to kolejny artykuł z cyklu "31 Days with Windows Phone".

W ostatnim artykule piałem o jednym ze sprzętowych przycisków w Windows Phone – przycisku Wstecz. Dzisiaj będę pisał o kolejnym aspekcie sprzętowym – orientacja telefonu.

Portretowa kontra krajobrazowa (Portrait, landscape)

Zdarzają się przypadki, kiedy pojęcia nie są jednoznaczne. Portretowa to pionowa orientacja urządzenia, Krajobrazowa to pozioma orientacja. Każda aplikacja ma możliwość obsługi obu orientacji, ale domyślnie włączona jest wersja portretowa (Portrait) dla aplikacji Silverlight, krajobrazowa (Landscape) dla aplikacji XNA (Gry zazwyczaj lepiej wyglądają w poziomym widoku). W tym artykule skupimy się na aplikacjach Silverlight oraz na sposobie pracy ze zmianą orientacji, która ułatwia pracę użytkownikom.

Twój domyślny projekt powinien być „Portrait-only”

Jeśli spojrzysz na informacje nagłówkową w pliku MainPage.xaml, zobaczysz dwie właściwości:

SupportedOrientations="Portrait" Orientation="Portrait"

SupportedOrientations jest jakby listą możliwości, jakie aplikacja obsługuje. Właściwość tą możesz ustawić na jedną z trzech możliwości:

  • Portrait (domyślnie)
  • Landscape
  • PortraitOrLandscape

Właściwość Orientation mówi nam o tym, jaka jest domyślna wartość przy uruchomieniu aplikacji. Tutaj mamy większą liczbę możliwości, ale pamiętaj, że jeśli wybierasz wartość związaną z Landscape musisz mieć ją włączoną w SupportedOrientations. Oto lista możliwych wartości:

  • Landscape
  • LandscapeLeft (telefon lewą krawędzią do dołu)
  • LandscapeRight (telefon prawą krawędzią do dołu)
  • Portrait
  • PortraitDown (normalna pozycja pionowa)
  • PortraitUp (telefon do góry nogami)

Jak sam widzisz, możesz nie tylko ustalić startowe położenie, ale również przyleganie do krawędzi. To daje możliwość uruchomienia aplikacji z dowolnym jej położeniem.

Zmiana orientacji

Są dwie możliwości zmiany orientacji. Pierwsza to zmiana SupportedOrientation na PortraitOrLandscape i pozwolenie systemowi na samodzielne zmiany za Ciebie. W większości przypadków nie polecam tego sposobu, ponieważ przeważnie aplikacje nie będą dopasowane do ekranu. Druga możliwość to zmiana orientacji za pomocą kodu. W poniższym przykładzie pokażę jak to zrobić.

Zacznijmy od utworzenia prostego interfejsu, który zajmuje cały ekran zorientowany pionowo. Oto przykład:

 

Jak sam widzisz większość przycisków w ułożeniu poziomym jest poza ekranem. Nie jest to zbyt wygodne rozwiązanie, zwłaszcza dla użytkowników. Prostym sposobem na rozwiązanie tego jest np. usunięcie części tytułowej. Jestem przekonany, że nasi użytkownicy zauważą, że to jest kalkulator. Zatem gdy telefon będzie w trybie Landscape to wyłączmy tytuł. Możemy także zmienić ułożenie przycisków, jeśli to ma sens dla aplikacji. Zatem zróbmy to. Założeniem tego postu jest JAK możesz zmienić aplikację w zależności od położenia telefonu a nie CO powinieneś zmienić. Poniżej przedstawiam kod, który użyłem aby ukryć pasek tytułowy.

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; 
            } 
        } 
    } 
}
 

Ponieważ sprawdzam jedynie, czy moja aplikacja jest w położeniu pionowym lub poziomym (bez uwzględniania specyficznych sytuacji), sprawdzam oba stany i dostosowuję interfejs. Ty natomiast powinieneś zazwyczaj zmieniać interfejs oddzielnie dla każdego z przypadków.

Jak sam zapewne zauważyłeś stworzyłem obsługę zdarzenia OrientationChanged. To jest zazwyczaj najprostsza droga do rozpoznania, kiedy telefon zmieni położenie, ale zawsze możesz skorzystać z akcelerometru, jeśli wolisz. Więcej o akcelerometrze w 14 artykule. A oto efekt końcowy:

 

Komentarze 1

Kamil Dudek
Kamil Dudek
258 pkt.
Junior
Uczestnik projektów
08-11-2011
oceń pozytywnie 0
Super bardzo pomocne materiały tłumaczenie nie powala ale lepsze niż google ;)
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.