Xamarin.Forms Třída zařízení
Třída Device
obsahuje řadu vlastností a metod, které vývojářům pomáhají přizpůsobit rozložení a funkce na základě jednotlivých platforem.
Kromě metod a vlastností pro cílení kódu na konkrétní typy a velikosti hardwaru třída obsahuje metody, Device
které lze použít k interakci s ovládacími prvky uživatelského rozhraní z vláken na pozadí. Další informace naleznete v tématu Interakce s uživatelským rozhraním z vláken na pozadí.
Zadání hodnot specifických pro platformu
Xamarin.Forms Před verzí 2.3.4 bylo možné získat platformu, na které aplikace běží, prozkoumáním Device.OS
vlastnosti a porovnáním s TargetPlatform.iOS
hodnotami , TargetPlatform.Android
, TargetPlatform.WinPhone
a TargetPlatform.Windows
výčtu. Podobně lze jednu z Device.OnPlatform
přetížení použít k poskytnutí hodnot specifických pro platformu ovládacímu prvku.
Od Xamarin.Forms verze 2.3.4 jsou však tato rozhraní API zastaralá a nahrazena. Třída Device
nyní obsahuje veřejné řetězcové konstanty, které identifikují platformy – Device.iOS
, Device.Android
, Device.WinPhone
(zastaralé), (zastaralé) Device.WinRT
Device.UWP
a Device.macOS
. Device.OnPlatform
Podobně byla přetížení nahrazena rozhraními API a On
rozhraními OnPlatform
API.
V jazyce C# je možné hodnoty specifické pro platformu poskytnout vytvořením switch
příkazu pro Device.RuntimePlatform
vlastnost a následným zadáním case
příkazů pro požadované platformy:
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);
On
Třídy OnPlatform
poskytují stejné funkce v 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>
Třída OnPlatform
je obecná třída, která musí být vytvořena s atributem x:TypeArguments
, který odpovídá cílovému typu. On
Ve třídě Platform
může atribut přijmout jednu string
hodnotu nebo více hodnot oddělených string
čárkami.
Důležité
Poskytnutí nesprávné Platform
hodnoty atributu On
ve třídě nebude mít za následek chybu. Místo toho se kód spustí bez použití hodnoty specifické pro platformu.
OnPlatform
Rozšíření značek můžete také použít v XAML k přizpůsobení vzhledu uživatelského rozhraní na základě jednotlivých platforem. Další informace naleznete v tématu OnPlatform Markup Extension.
Device.Idiom
Device.Idiom
Vlastnost lze použít ke změně rozložení nebo funkčnosti v závislosti na zařízení, na kterém aplikace běží. Výčet TargetIdiom
obsahuje následující hodnoty:
- Telefon – iPhone, iPod touch a zařízení s Androidem užší než 600 dipů^
- Tablet – iPad, zařízení s Windows a zařízení s Androidem širší než 600 dipů^
- Desktop – vrací se jenom v aplikacích pro UPW na stolních počítačích s Windows 10 (vrací se
Phone
na mobilních zařízeních s Windows, včetně scénářů Continuum) - TV – Tizen TV zařízení
- Hodinky – Tizen watch devices
- Nepodporované – nepoužívané
^ poklesy nemusí nutně odpovídat počtu fyzických pixelů.
Vlastnost Idiom
je zvlášť užitečná pro rozložení budov, která využívají větší obrazovky, například takto:
if (Device.Idiom == TargetIdiom.Phone) {
// layout views vertically
} else {
// layout views horizontally for a larger display (tablet or desktop)
}
Třída OnIdiom
poskytuje stejné funkce v 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>
Třída OnIdiom
je obecná třída, která musí být vytvořena s atributem x:TypeArguments
, který odpovídá cílovému typu.
Alternativně OnIdiom
lze rozšíření značek použít v XAML k přizpůsobení vzhledu uživatelského rozhraní na základě iddiomu zařízení, na kterém aplikace běží. Další informace naleznete v tématu OnIdiom Markup Extension.
Device.FlowDirection
Tato Device.FlowDirection
hodnota načte hodnotu výčtu FlowDirection
, která představuje aktuální směr toku používaný zařízením. Směr toku je směr, ve kterém jsou prvky uživatelského rozhraní na stránce naskenovány okem. Hodnoty výčtu jsou:
V jazyce XAML Device.FlowDirection
je možné tuto hodnotu načíst pomocí x:Static
rozšíření značek:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
Ekvivalentní kód v jazyce C# je:
this.FlowDirection = Device.FlowDirection;
Další informace o směru toku naleznete v tématu Lokalizace zprava doleva.
Device.Styles
Vlastnost Styles
obsahuje předdefinované definice stylu, které lze použít u některých ovládacích prvků (napříkladLabel
) Style
vlastnosti. Dostupné styly jsou:
- BodyStyle
- Titulek – styl
- ListItemDetailTextStyle
- ListItemTextStyle
- Podnadpis
- Styl nadpisu
Device.GetNamedSize
GetNamedSize
lze použít při nastavování FontSize
v kódu jazyka 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 zavádí podporu pojmenovaných barev. Pojmenovaná barva je barva, která má jinou hodnotu v závislosti na tom, jaký systémový režim (například světlý nebo tmavý) je v zařízení aktivní. V Androidu jsou pojmenované barvy přístupné prostřednictvím třídy R.Color . V iOSu se pojmenované barvy nazývají systémové barvy. Na Univerzální platforma Windows se pojmenované barvy nazývají prostředky motivu XAML.
Tuto metodu GetNamedColor
lze použít k načtení pojmenovaných barev v Androidu, iOSu a UPW. Metoda vezme string
argument a vrátí Color
:
// Retrieve an Android named color
Color color = Device.GetNamedColor(NamedPlatformColor.HoloBlueBright);
Color.Default
bude vrácena, pokud nelze najít název barvy nebo při GetNamedColor
vyvolání na nepodporované platformě.
Poznámka:
GetNamedColor
Vzhledem k tomu, že metoda vrací konkrétní Color
platformu, měla by se obvykle používat ve spojení s Device.RuntimePlatform
vlastností.
Třída NamedPlatformColor
obsahuje konstanty, které definují pojmenované barvy pro Android, iOS a UPW:
Android | iOS | macOS | 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
Třída Device
má také metodu StartTimer
, která poskytuje jednoduchý způsob, jak aktivovat úkoly závislé na čase, které fungují v Xamarin.Forms běžném kódu, včetně knihovny .NET Standard. TimeSpan
Předejte interval a vraťte true
se, aby časovač běžel nebo false
ho zastavil po aktuálním vyvolání.
Device.StartTimer (new TimeSpan (0, 0, 60), () =>
{
// do something every 60 seconds
return true; // runs again, or false to stop
});
Pokud kód uvnitř časovače komunikuje s uživatelským rozhraním (například nastavením textu Label
nebo zobrazení výstrahy), měl by být proveden uvnitř výrazu BeginInvokeOnMainThread
(viz níže).
Poznámka:
Třídy System.Timers.Timer
jsou System.Threading.Timer
alternativy rozhraní .NET Standard k použití Device.StartTimer
metody.
Interakce s uživatelským rozhraním z vláken na pozadí
Většina operačních systémů, včetně iOS, Androidu a Univerzální platforma Windows, používá pro kód zahrnující uživatelské rozhraní model s jedním vláknem. Toto vlákno se často označuje jako hlavní vlákno nebo vlákno uživatelského rozhraní. Důsledkem tohoto modelu je, že veškerý kód, který přistupuje k prvkům uživatelského rozhraní, musí běžet v hlavním vlákně aplikace.
Aplikace někdy používají vlákna na pozadí k provádění potenciálně dlouhotrvajících operací, jako je načítání dat z webové služby. Pokud kód spuštěný ve vlákně na pozadí potřebuje přístup k prvkům uživatelského rozhraní, musí tento kód spustit v hlavním vlákně.
Třída Device
obsahuje následující static
metody, které lze použít k interakci s prvky uživatelského rozhraní z vláken pozadí:
metoda | Argumenty | Návraty | Účel |
---|---|---|---|
BeginInvokeOnMainThread |
Action |
void |
Vyvolá hlavní Action vlákno a nečeká na jeho dokončení. |
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Func<T> Vyvolá hlavní vlákno a počká na jeho dokončení. |
InvokeOnMainThreadAsync |
Action |
Task |
Vyvolá hlavní Action vlákno a počká na jeho dokončení. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Func<Task<T>> Vyvolá hlavní vlákno a počká na jeho dokončení. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Func<Task> Vyvolá hlavní vlákno a počká na jeho dokončení. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
SynchronizationContext Vrátí hodnotu pro hlavní vlákno. |
Následující kód ukazuje příklad použití BeginInvokeOnMainThread
metody:
Device.BeginInvokeOnMainThread (() =>
{
// interact with UI elements
});