Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa Device zawiera wiele właściwości i metod, które ułatwiają deweloperom dostosowywanie układu i funkcjonalności dla poszczególnych platform.
Oprócz metod i właściwości kodu docelowego w określonych typach sprzętu i rozmiarach klasa zawiera metody, Device które mogą służyć do interakcji z kontrolkami interfejsu użytkownika z wątków w tle. Aby uzyskać więcej informacji, zobacz Interakcja z interfejsem użytkownika z wątków w tle.
Podaj wartości specyficzne dla platformy
Xamarin.Forms Przed wersją 2.3.4 platforma, na którą uruchomiono aplikację, można uzyskać, sprawdzając Device.OS właściwość i porównując ją z wartościami TargetPlatform.iOSTargetPlatform.Android, , TargetPlatform.WinPhonei TargetPlatform.Windows wyliczenia. Podobnie można użyć jednego z Device.OnPlatform przeciążeń w celu zapewnienia wartości specyficznych dla platformy dla kontrolki.
Jednak od Xamarin.Forms wersji 2.3.4 te interfejsy API zostały wycofane i zastąpione. Klasa Device zawiera teraz stałe ciągów publicznych identyfikujące platformy — Device.iOS, , Device.Android(Device.WinPhoneprzestarzałe), (przestarzałe), Device.UWPDevice.WinRT i Device.macOS. Device.OnPlatform Podobnie przeciążenia zostały zastąpione interfejsami OnPlatform API i On .
W języku C#wartości specyficzne dla platformy można podać, tworząc instrukcję switch we Device.RuntimePlatform właściwości, a następnie podając case instrukcje dla wymaganych platform:
double top;
switch (Device.RuntimePlatform)
{
case Device.iOS:
top = 20;
break;
case Device.Android:
case Device.UWP:
default:
top = 0;
break;
}
layout.Margin = new Thickness(5, top, 5, 0);
Klasy OnPlatform i On zapewniają te same funkcje w języku XAML:
<StackLayout>
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
<On Platform="Android, UWP" Value="0,0,0,0" />
</OnPlatform>
</StackLayout.Margin>
...
</StackLayout>
Klasa OnPlatform jest klasą ogólną, która musi zostać utworzone za pomocą atrybutu zgodnego z typem x:TypeArguments docelowym. On W klasie Platform atrybut może akceptować pojedynczą string wartość lub wiele wartości rozdzielonych string przecinkami.
Ważne
Podanie nieprawidłowej Platform wartości atrybutu On w klasie nie spowoduje błędu. Zamiast tego kod zostanie wykonany bez zastosowania wartości specyficznej dla platformy.
Alternatywnie OnPlatform rozszerzenie znaczników może służyć w języku XAML do dostosowywania wyglądu interfejsu użytkownika dla poszczególnych platform. Aby uzyskać więcej informacji, zobacz OnPlatform Markup Extension (Rozszerzenie znaczników OnPlatform).
Device.Idiom
Właściwość Device.Idiom może służyć do zmiany układów lub funkcji w zależności od urządzenia, na którym działa aplikacja. Wyliczenie TargetIdiom zawiera następujące wartości:
- Telefon — urządzenia iPhone, iPod touch i Android węższe niż 600 dips^
- Tablet — urządzenia iPad, urządzenia z systemem Windows i urządzenia z systemem Android szersze niż 600 dips^
- Desktop — zwracane tylko w aplikacjach platformy UNIWERSALNEJ systemu Windows na komputerach stacjonarnych z systemem Windows 10 (zwracane
Phonena urządzeniach przenośnych z systemem Windows, w tym w scenariuszach Continuum) - TV – urządzenia telewizyjne Tizen
- Zegarek — urządzenia zegarków Tizen
- Nieobsługiwane — nieużywane
^ dips nie musi być fizyczna liczba pikseli
Właściwość jest szczególnie przydatna Idiom w przypadku tworzenia układów korzystających z większych ekranów, takich jak:
if (Device.Idiom == TargetIdiom.Phone) {
// layout views vertically
} else {
// layout views horizontally for a larger display (tablet or desktop)
}
Klasa OnIdiom zapewnia te same funkcje w języku XAML:
<StackLayout>
<StackLayout.Margin>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>0,20,0,0</OnIdiom.Phone>
<OnIdiom.Tablet>0,40,0,0</OnIdiom.Tablet>
<OnIdiom.Desktop>0,60,0,0</OnIdiom.Desktop>
</OnIdiom>
</StackLayout.Margin>
...
</StackLayout>
Klasa OnIdiom jest klasą ogólną, która musi zostać utworzone za pomocą atrybutu zgodnego z typem x:TypeArguments docelowym.
Alternatywnie można użyć rozszerzenia znaczników w języku XAML, OnIdiom aby dostosować wygląd interfejsu użytkownika na podstawie idiomu urządzenia, na którym działa aplikacja. Aby uzyskać więcej informacji, zobacz OnIdiom Markup Extension (Rozszerzenie znaczników OnIdiom).
Device.FlowDirection
Wartość Device.FlowDirection pobiera FlowDirection wartość wyliczenia reprezentującą bieżący kierunek przepływu używany przez urządzenie. Kierunek przepływu to kierunek, w którym elementy interfejsu użytkownika na stronie są skanowane przez oko. Wartości wyliczenia to:
W języku Device.FlowDirection XAML wartość można pobrać przy użyciu x:Static rozszerzenia znaczników:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
Równoważny kod w języku C# to:
this.FlowDirection = Device.FlowDirection;
Aby uzyskać więcej informacji na temat kierunku przepływu, zobacz Lokalizacja od prawej do lewej.
Device.Styles
Właściwość Styles zawiera wbudowane definicje stylów, które można zastosować do niektórych kontrolek (takich jak Label) Style właściwości. Dostępne style to:
- Styl ciała
- CaptionStyle
- ListItemDetailTextStyle
- ListItemTextStyle
- Styl podtytułu
- Styl tytułu
Device.GetNamedSize
GetNamedSize można użyć podczas ustawiania FontSize w kodzie języka C#:
myLabel.FontSize = Device.GetNamedSize (NamedSize.Small, myLabel);
someLabel.FontSize = Device.OnPlatform (
24, // hardcoded size
Device.GetNamedSize (NamedSize.Medium, someLabel),
Device.GetNamedSize (NamedSize.Large, someLabel)
);
Device.GetNamedColor
Xamarin.Forms 4.6 wprowadza obsługę nazwanych kolorów. Nazwany kolor to kolor, który ma inną wartość w zależności od tego, który tryb systemowy (na przykład jasny lub ciemny) jest aktywny na urządzeniu. W systemie Android dostęp do nazwanych kolorów uzyskuje się za pośrednictwem klasy R.Color . W systemie iOS nazwane kolory są nazywane kolorami systemu. Na platforma uniwersalna systemu Windows nazwane kolory są nazywane zasobami motywu XAML.
Metoda może służyć do pobierania GetNamedColor nazwanych kolorów w systemach Android, iOS i UWP. Metoda przyjmuje string argument i zwraca wartość Color:
// Retrieve an Android named color
Color color = Device.GetNamedColor(NamedPlatformColor.HoloBlueBright);
Color.Default zostanie zwrócona, gdy nie można odnaleźć nazwy koloru lub gdy GetNamedColor jest wywoływana na nieobsługiwanej platformie.
Uwaga
GetNamedColor Ponieważ metoda zwraca wartość specyficzną Color dla platformy, zwykle powinna być używana w połączeniu z właściwością Device.RuntimePlatform .
Klasa NamedPlatformColor zawiera stałe, które definiują nazwane kolory dla systemów Android, iOS i UWP:
| Android | iOS | macOS | Platforma UWP |
|---|---|---|---|
BackgroundDark |
Label |
AlternateSelectedControlTextColor |
SystemAltHighColor |
BackgroundLight |
Link |
ControlAccent |
SystemAltLowColor |
Black |
OpaqueSeparator |
ControlBackgroundColor |
SystemAltMediumColor |
DarkerGray |
PlaceholderText |
ControlColor |
SystemAltMediumHighColor |
HoloBlueBright |
QuaternaryLabel |
DisabledControlTextColor |
SystemAltMediumLowColor |
HoloBlueDark |
SecondaryLabel |
FindHighlightColor |
SystemBaseHighColor |
HoloBlueLight |
Separator |
GridColor |
SystemBaseLowColor |
HoloGreenDark |
SystemBlue |
HeaderTextColor |
SystemBaseMediumColor |
HoloGreenLight |
SystemGray |
HighlightColor |
SystemBaseMediumHighColor |
HoloOrangeDark |
SystemGray2 |
KeyboardFocusIndicatorColor |
SystemBaseMediumLowColor |
HoloOrangeLight |
SystemGray3 |
Label |
SystemChromeAltLowColor |
HoloPurple |
SystemGray4 |
LabelColor |
SystemChromeBlackHighColor |
HoloRedDark |
SystemGray5 |
Link |
SystemChromeBlackLowColor |
HoloRedLight |
SystemGray6 |
LinkColor |
SystemChromeBlackMediumColor |
TabIndicatorText |
SystemGreen |
PlaceholderText |
SystemChromeBlackMediumLowColor |
Transparent |
SystemIndigo |
PlaceholderTextColor |
SystemChromeDisabledHighColor |
White |
SystemOrange |
QuaternaryLabel |
SystemChromeDisabledLowColor |
WidgetEditTextDark |
SystemPink |
QuaternaryLabelColor |
SystemChromeHighColor |
SystemPurple |
SecondaryLabel |
SystemChromeLowColor |
|
SystemRed |
SecondaryLabelColor |
SystemChromeMediumColor |
|
SystemTeal |
SelectedContentBackgroundColor |
SystemChromeMediumLowColor |
|
SystemYellow |
SelectedControlColor |
SystemChromeWhiteColor |
|
TertiaryLabel |
SelectedControlTextColor |
SystemListLowColor |
|
SelectedMenuItemTextColor |
SystemListMediumColor |
||
SelectedTextBackgroundColor |
|||
SelectedTextColor |
|||
Separator |
|||
SeparatorColor |
|||
ShadowColor |
|||
SystemBlue |
|||
SystemGray |
|||
SystemGreen |
|||
SystemIndigo |
|||
SystemOrange |
|||
SystemPink |
|||
SystemPurple |
|||
SystemRed |
|||
SystemTeal |
|||
SystemYellow |
|||
TertiaryLabel |
|||
TertiaryLabelColor |
|||
TextBackgroundColor |
|||
TextColor |
|||
UnderPageBackgroundColor |
|||
UnemphasizedSelectedContentBackgroundColor |
|||
UnemphasizedSelectedTextBackgroundColor |
|||
UnemphasizedSelectedTextColor |
|||
WindowBackgroundColor |
|||
WindowFrameTextColor |
Device.StartTimer
Klasa Device ma również metodę StartTimer , która zapewnia prosty sposób wyzwalania zadań zależnych od czasu, które działają we wspólnym kodzie, w Xamarin.Forms tym biblioteki .NET Standard. Przekaż element , TimeSpan aby ustawić interwał i wrócić true , aby zachować czasomierz uruchomiony lub false zatrzymać go po bieżącej wywołaniu.
Device.StartTimer (new TimeSpan (0, 0, 60), () =>
{
// do something every 60 seconds
return true; // runs again, or false to stop
});
Jeśli kod wewnątrz czasomierza wchodzi w interakcję z interfejsem użytkownika (np. ustawieniem tekstu Label obiektu lub wyświetleniem alertu), należy go wykonać wewnątrz BeginInvokeOnMainThread wyrażenia (patrz poniżej).
Uwaga
Klasy System.Timers.Timer i System.Threading.Timer to alternatywy dla platformy .NET Standard przy użyciu Device.StartTimer metody .
Interakcja z interfejsem użytkownika z wątków w tle
Większość systemów operacyjnych, w tym systemów iOS, Android i platforma uniwersalna systemu Windows, używa modelu jednowątkowego dla kodu obejmującego interfejs użytkownika. Ten wątek jest często nazywany głównym wątkiem lub wątkiem interfejsu użytkownika. Konsekwencją tego modelu jest to, że cały kod, który uzyskuje dostęp do elementów interfejsu użytkownika, musi być uruchamiany w głównym wątku aplikacji.
Aplikacje czasami używają wątków w tle do wykonywania potencjalnie długotrwałych operacji, takich jak pobieranie danych z usługi internetowej. Jeśli kod działający w wątku w tle musi uzyskać dostęp do elementów interfejsu użytkownika, musi on uruchomić ten kod w głównym wątku.
Klasa Device zawiera następujące static metody, które mogą służyć do interakcji z elementami interfejsu użytkownika z wątków tła:
| Method | Argumenty | Zwraca | Purpose |
|---|---|---|---|
BeginInvokeOnMainThread |
Action |
void |
Wywołuje element Action w wątku głównym i nie czeka na jego ukończenie. |
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Wywołuje element Func<T> w wątku głównym i czeka na jego ukończenie. |
InvokeOnMainThreadAsync |
Action |
Task |
Wywołuje element Action w wątku głównym i czeka na jego ukończenie. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Wywołuje element Func<Task<T>> w wątku głównym i czeka na jego ukończenie. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Wywołuje element Func<Task> w wątku głównym i czeka na jego ukończenie. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
Zwraca wartość SynchronizationContext dla głównego wątku. |
Poniższy kod przedstawia przykład użycia BeginInvokeOnMainThread metody :
Device.BeginInvokeOnMainThread (() =>
{
// interact with UI elements
});