Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
La Device classe contient un certain nombre de propriétés et de méthodes pour aider les développeurs à personnaliser la disposition et les fonctionnalités par plateforme.
En plus des méthodes et des propriétés pour cibler le code à des types et tailles de matériel spécifiques, la Device classe inclut des méthodes qui peuvent être utilisées pour interagir avec les contrôles d’interface utilisateur à partir de threads d’arrière-plan. Pour plus d’informations, consultez Interagir avec l’interface utilisateur à partir de threads d’arrière-plan.
Fournir des valeurs spécifiques à la plateforme
Xamarin.Forms Avant la version 2.3.4, la plateforme sur laquelle l’application s’exécutait pouvait être obtenue en examinant la Device.OS propriété et en la comparant aux TargetPlatform.iOSvaleurs , TargetPlatform.Androidet TargetPlatform.WinPhoneTargetPlatform.Windows aux valeurs d’énumération. De même, l’une des Device.OnPlatform surcharges peut être utilisée pour fournir des valeurs spécifiques à la plateforme à un contrôle.
Toutefois, depuis Xamarin.Forms la version 2.3.4, ces API ont été déconseillées et remplacées. La Device classe contient désormais des constantes de chaîne publique qui identifient les plateformes Device.iOS: , Device.AndroidDevice.WinPhone(déconseillé), (déconseillé), Device.WinRT (déconseillé), Device.UWPet Device.macOS. De même, les Device.OnPlatform surcharges ont été remplacées par les API et On les OnPlatform API.
En C#, les valeurs spécifiques à la plateforme peuvent être fournies en créant une switch instruction sur la Device.RuntimePlatform propriété, puis en fournissant des case instructions pour les plateformes requises :
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);
Les OnPlatform classes et On les classes fournissent les mêmes fonctionnalités en 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>
La OnPlatform classe est une classe générique qui doit être instanciée avec un x:TypeArguments attribut qui correspond au type cible. Dans la On classe, l’attribut Platform peut accepter une valeur unique string ou plusieurs valeurs délimitées par des virgules string .
Important
La fourniture d’une valeur d’attribut incorrecte Platform dans la On classe n’entraîne pas d’erreur. Au lieu de cela, le code s’exécute sans que la valeur spécifique à la plateforme soit appliquée.
Vous pouvez également utiliser l’extension de balisage en XAML pour personnaliser l’apparence OnPlatform de l’interface utilisateur par plateforme. Pour plus d’informations, consultez l’extension de balisage OnPlatform.
Device.Idiom
La Device.Idiom propriété peut être utilisée pour modifier les dispositions ou les fonctionnalités en fonction de l’appareil sur lequel l’application s’exécute. L’énumération TargetIdiom contient les valeurs suivantes :
- Téléphone : iPhone, iPod touch et appareils Android plus étroits que 600 dips^
- Tablette : iPad, appareils Windows et appareils Android plus larges que 600 dips^
- Bureau : retourné uniquement dans les applications UWP sur les ordinateurs de bureau Windows 10 (retourne
Phonesur les appareils Windows mobiles, y compris dans les scénarios Continuum) - TV – Appareils de télévision Tizen
- Espion – Appareils de montre Tizen
- Non pris en charge : inutilisé
^ dips n’est pas nécessairement le nombre de pixels physiques
La Idiom propriété est particulièrement utile pour créer des dispositions qui tirent parti des écrans plus grands, comme suit :
if (Device.Idiom == TargetIdiom.Phone) {
// layout views vertically
} else {
// layout views horizontally for a larger display (tablet or desktop)
}
La OnIdiom classe fournit les mêmes fonctionnalités en 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>
La OnIdiom classe est une classe générique qui doit être instanciée avec un x:TypeArguments attribut qui correspond au type cible.
Vous pouvez également utiliser l’extension OnIdiom de balisage en XAML pour personnaliser l’apparence de l’interface utilisateur en fonction de l’idiome de l’appareil sur lequel l’application s’exécute. Pour plus d’informations, consultez l’extension de balisage OnIdiom.
Device.FlowDirection
La Device.FlowDirection valeur récupère une FlowDirection valeur d’énumération qui représente la direction actuelle du flux utilisée par l’appareil. Le sens du flux est la direction dans laquelle les éléments d’interface utilisateur sur la page sont analysés par l’œil. Ces valeurs sont les suivantes :
En XAML, la Device.FlowDirection valeur peut être récupérée à l’aide de l’extension de x:Static balisage :
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
Le code équivalent en C# est le suivant :
this.FlowDirection = Device.FlowDirection;
Pour plus d’informations sur la direction du flux, consultez Localisation de droite à gauche.
Device.Styles
La Styles propriété contient des définitions de style intégrées qui peuvent être appliquées à certaines propriétés de contrôle (par Labelexemple). Style Les styles disponibles sont les suivants :
- BodyStyle
- CaptionStyle
- ListItemDetailTextStyle
- ListItemTextStyle
- SubtitleStyle
- TitleStyle
Device.GetNamedSize
GetNamedSize peut être utilisé lors de la définition FontSize dans le code 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 introduit la prise en charge des couleurs nommées. Une couleur nommée est une couleur qui a une valeur différente selon le mode système (par exemple, clair ou foncé) actif sur l’appareil. Sur Android, les couleurs nommées sont accessibles via la classe R.Color . Sur iOS, les couleurs nommées sont appelées couleurs système. Dans le plateforme Windows universelle, les couleurs nommées sont appelées ressources de thème XAML.
La GetNamedColor méthode peut être utilisée pour récupérer des couleurs nommées sur Android, iOS et UWP. La méthode prend un string argument et retourne un Color:
// Retrieve an Android named color
Color color = Device.GetNamedColor(NamedPlatformColor.HoloBlueBright);
Color.Default est retourné lorsqu’un nom de couleur est introuvable ou lorsqu’il GetNamedColor est appelé sur une plateforme non prise en charge.
Remarque
Étant donné que la GetNamedColor méthode retourne une Color valeur spécifique à une plateforme, elle doit généralement être utilisée conjointement avec la Device.RuntimePlatform propriété.
La NamedPlatformColor classe contient les constantes qui définissent les couleurs nommées pour Android, iOS et UWP :
| 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
La Device classe a également une StartTimer méthode qui fournit un moyen simple de déclencher des tâches dépendantes du temps qui fonctionnent dans Xamarin.Forms le code commun, y compris une bibliothèque .NET Standard. Passez un TimeSpan pour définir l’intervalle et revenir true pour conserver le minuteur en cours d’exécution ou false pour l’arrêter après l’appel actuel.
Device.StartTimer (new TimeSpan (0, 0, 60), () =>
{
// do something every 60 seconds
return true; // runs again, or false to stop
});
Si le code à l’intérieur du minuteur interagit avec l’interface utilisateur (par exemple, la définition du texte d’une Label alerte ou l’affichage d’une alerte) il doit être effectué à l’intérieur d’une BeginInvokeOnMainThread expression (voir ci-dessous).
Remarque
Les System.Timers.Timer classes et System.Threading.Timer les classes sont des alternatives .NET Standard à l’utilisation de la Device.StartTimer méthode.
Interagir avec l’interface utilisateur à partir de threads d’arrière-plan
La plupart des systèmes d’exploitation, y compris iOS, Android et le plateforme Windows universelle, utilisent un modèle de thread unique pour le code impliquant l’interface utilisateur. Ce thread est souvent appelé thread principal ou thread d’interface utilisateur. Une conséquence de ce modèle est que tout le code qui accède aux éléments d’interface utilisateur doit s’exécuter sur le thread principal de l’application.
Les applications utilisent parfois des threads d’arrière-plan pour effectuer des opérations potentiellement longues, telles que la récupération de données à partir d’un service web. Si le code s’exécutant sur un thread d’arrière-plan doit accéder aux éléments d’interface utilisateur, il doit exécuter ce code sur le thread principal.
La Device classe inclut les méthodes suivantes static qui peuvent être utilisées pour interagir avec les éléments d’interface utilisateur à partir de threads d’arrière-plan :
| Method | Arguments | Retours | Objectif |
|---|---|---|---|
BeginInvokeOnMainThread |
Action |
void |
Appelle un Action thread principal et n’attend pas qu’il se termine. |
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Appelle un Func<T> sur le thread principal, puis attend qu’il se termine. |
InvokeOnMainThreadAsync |
Action |
Task |
Appelle un Action sur le thread principal, puis attend qu’il se termine. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Appelle un Func<Task<T>> sur le thread principal, puis attend qu’il se termine. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Appelle un Func<Task> sur le thread principal, puis attend qu’il se termine. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
Retourne le SynchronizationContext pour le thread principal. |
Le code suivant montre un exemple d’utilisation de la BeginInvokeOnMainThread méthode :
Device.BeginInvokeOnMainThread (() =>
{
// interact with UI elements
});