Xamarin.Forms Cihaz sınıfı
DeviceSınıfı, geliştiricilerin her platform temelinde düzen ve işlevselliği özelleştirmesine yardımcı olacak bir dizi özellik ve yöntem içerir.
Belirli donanım türlerinde ve boyutlarda kodu hedeflemek için yöntemlere ve özelliklere ek olarak, Device sınıfı arka plan iş parçacıklarında UI denetimleriyle etkileşim kurmak için kullanılabilecek yöntemleri içerir. Daha fazla bilgi için bkz. arka plan iş parçacıklarında Kullanıcı arabirimiyle etkileşim kurma.
Platforma özgü değerler sağlama
Xamarin.Forms2.3.4 ' den önce, uygulamanın üzerinde çalıştığı platform, Xamarin.Forms "Data-LinkType =" Absolute-path ">özelliğini _Device_OS Xamarin_Forms inceleyerek Device.OS ve Xamarin_Forms _TargetPlatform_iOS" Data-linktype = "absolute-path" >, Xamarin_Forms _TargetPlatform_Android "Data-LinkType =" mutlak yol ">TargetPlatform.iOSDevice.OSTargetPlatform.Android , Xamarin_Forms _TargetPlatform_WinPhone" Data-LinkType = "Absolute-path" >tarafından elde edilebilir. TargetPlatform.WinPhone ve _TargetPlatform_Windows "Data-LinkType =" absolute-path ">TargetPlatform.Windows numaralandırma değerlerini Xamarin_Forms. Benzer şekilde, Device.OnPlatform bir denetime platforma özgü değerler sağlamak için Xamarin_Forms _Device_OnPlatform_System_Action_System_Action_System_Action_System_Action_ "Data-LinkType =" absolute-path ">aşırı yüklemeleri kullanılabilir.
Ancak, Xamarin.Forms 2.3.4 Bu API 'lerin kullanım dışı bırakılmış ve değiştirilmiş olduğundan. DeviceSınıfı artık platformları tanımlayan genel dize sabitleri içerir – Device.iOS , Device.Android , Device.WinPhone (kullanım dışı), Device.WinRT (kullanım dışı), Device.UWP ve Device.macOS . Benzer şekilde, Xamarin_Forms _Device_OnPlatform_System_Action_System_Action_System_Action_System_Action_ "Data-LinkType =" mutlak yol ">Device.OnPlatform aşırı yüklemeleri OnPlatform ve On API 'leriyle değiştirilmiştir.
C# ' de, platforma özgü değerler, switch Xamarin_Forms switch _Device_RuntimePlatform "Data-LinkType =" Absolute-path ">Device.RuntimePlatform özelliği ve sonra case gerekli platformlar için deyimler sağlanması yoluyla sağlanabilir.
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);
OnPlatformVe On sınıfları xaml 'de aynı işlevselliği sağlar:
<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>
OnPlatformSınıfı, x:TypeArguments hedef türle eşleşen bir öznitelik ile örneğinin oluşturulması gereken bir genel sınıftır. OnSınıfında, Xamarin_Forms On _On_Platform "Data-LinkType =" Absolute-path ">Platform özniteliği tek bir string değer veya virgülle ayrılmış birden çok değer kabul edebilir string .
Önemli
Sınıfta yanlış bir Platform öznitelik değeri sağlanması On hataya neden olmaz. Bunun yerine, kod uygulanan platforma özgü değer olmadan yürütülür.
Alternatif olarak, OnPlatform biçimlendirme UZANTıSı xaml 'de, UI görünümünü platform başına temelinde özelleştirmek için kullanılabilir. Daha fazla bilgi için bkz. Onplatform Işaretleme uzantısı.
Cihaz. Idom
Device.IdiomÖzelliği, uygulamanın üzerinde çalıştığı cihaza bağlı olarak düzenleri veya işlevleri değiştirmek için kullanılabilir. TargetIdiomSabit listesi aşağıdaki değerleri içerir:
- Telefon : iPhone, iPod touch ve Android cihazlar 600 dıps ^ değerinden daha dar
- Tablet – iPad, Windows cihazları ve Android cihazları 600 dıps 'den daha geniş
- masaüstü – yalnızca Windows 10 masaüstü bilgisayarlarda UWP uygulamalarında döndürüldü ( Continuum senaryolarında da dahil olmak üzere mobil Windows cihazlarda döner)
- TV – Tizen TV cihazları
- Watch : Tizen Watch cihazları
- Desteklenmeyen – kullanılmıyor
^ DIP fiziksel piksel sayısı olmak üzere değil
Özelliği, aşağıdaki Idiom gibi daha büyük ekranlardan faydalanan düzenler oluşturmak için özellikle yararlıdır:
if (Device.Idiom == TargetIdiom.Phone) {
// layout views vertically
} else {
// layout views horizontally for a larger display (tablet or desktop)
}
OnIdiomSınıfı, XAML 'de aynı işlevselliği sağlar:
<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>
OnIdiomSınıfı, x:TypeArguments hedef türle eşleşen bir öznitelik ile örneğinin oluşturulması gereken bir genel sınıftır.
Alternatif olarak, OnIdiom biçimlendirme uzantısı, uygulamanın üzerinde çalıştığı cihazın idvünün temel alınarak Kullanıcı arabirimi görünümünü özelleştirmek IÇIN xaml 'de kullanılabilir. Daha fazla bilgi için bkz. Onidom Işaretleme uzantısı.
Device. FlowDirection
Xamarin_Forms _VisualElement_FlowDirection "Data-LinkType =" Absolute-path ">Device.FlowDirection değeri, FlowDirection cihaz tarafından kullanılan geçerli akış yönünü temsil eden bir sabit listesi değeri alır. Flow yönü, sayfadaki kullanıcı arabirimi öğelerinin gözle tarandığı yönlerdir. Numaralandırma değerleri şunlardır:
- Xamarin_Forms _FlowDirection_LeftToRight "Data-LinkType =" Absolute-path ">
LeftToRight - Xamarin_Forms _FlowDirection_RightToLeft "Data-LinkType =" Absolute-path ">
RightToLeft - Xamarin_Forms _FlowDirection_MatchParent "Data-LinkType =" Absolute-path ">
MatchParent
XAML 'de, Xamarin_Forms _VisualElement_FlowDirection "Data-LinkType =" Absolute-path ">Device.FlowDirection değeri, x:Static biçimlendirme uzantısı kullanılarak alınabilir:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
C# ' deki denk kod şu şekilde olur:
this.FlowDirection = Device.FlowDirection;
Akış yönü hakkında daha fazla bilgi için bkz. sağdan sola yerelleştirme.
Device. Styles
Özelliği , bazı denetimlerin (örn Label .) özelliğine uygulanabilen yerleşik stil tanımları içerir Style . Kullanılabilir stiller şunlardır:
- BodyStyle
- CaptionStyle
- ListItemDetailTextStyle
- ListItemTextStyle
- Alt başlık stili
- Başlık stili
Device. GetNamedSize
GetNamedSize , C# kodunda ayarlandığında kullanılabilir FontSize :
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, adlandırılmış renkler için destek sunar. Adlandırılmış renk, cihazda hangi sistem modunun (örneğin, hafif veya koyu) etkin olduğuna bağlı olarak farklı bir değere sahip bir renktir. Android 'de, adlandırılmış renklere R. Color sınıfı aracılığıyla erişilir. İOS 'ta, adlandırılmış renkler sistem renkleriolarak adlandırılır. Evrensel Windows Platformu, adlandırılmış renklere XAML teması kaynaklarıdenir.
GetNamedColorYöntemi, Android, iOS ve UWP 'de adlandırılmış renkleri almak için kullanılabilir. Yöntemi bir string bağımsız değişken alır ve şunu döndürür Color :
// Retrieve an Android named color
Color color = Device.GetNamedColor(NamedPlatformColor.HoloBlueBright);
Color.Default , bir renk adı bulunamadığında veya GetNamedColor Desteklenmeyen bir platformda çağrıldığında döndürülür.
Not
GetNamedColorYöntemi Color bir platforma özgü bir değer döndürdüğünden, genellikle Xamarin_Forms GetNamedColor _Device_RuntimePlatform "Data-LinkType =" absolute-path ">özelliği ile birlikte kullanılmalıdır Device.RuntimePlatform .
NamedPlatformColorSınıfı, Android, iOS ve UWP için adlandırılmış renkleri tanımlayan sabitleri içerir:
| Android | iOS | Mac OS | 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 |
Cihaz. StartTimer
DeviceSınıfı ayrıca StartTimerXamarin.Forms , bir .NET Standard kitaplığı dahil olmak üzere ortak kodda çalıştırılan zamana bağlı görevleri tetiklemenin basit bir yolunu sağlayan bir yöntemi de vardır. TimeSpanAralığı ayarlamak için geçirin ve true geçerli çağrıdan sonra süreölçeri çalıştırmak veya durdurmak için geri döndürün false .
Device.StartTimer (new TimeSpan (0, 0, 60), () =>
{
// do something every 60 seconds
return true; // runs again, or false to stop
});
Zamanlayıcının içindeki kod Kullanıcı arabirimiyle etkileşime geçtiğinde (örn. metin Label veya bir uyarı görüntüleme gibi) bir ifadenin içinde yapılmalıdır BeginInvokeOnMainThread (aşağıya bakın).
Not
System.Timers.TimerVe System.Threading.Timer sınıfları yöntemini kullanmanın alternatifleri .NET Standard Device.StartTimer .
Arka plan iş parçacıklarında Kullanıcı arabirimiyle etkileşim kurma
iOS, Android ve Evrensel Windows Platformu dahil çoğu işletim sistemi, kullanıcı arabirimiyle ilgili kod için tek iş parçacığı modeli kullanır. Bu iş parçacığı genellikle ana iş parçacığı veya Kullanıcı arabirimi iş parçacığıolarak adlandırılır. Bu modelin bir sonucu, Kullanıcı Arabirimi öğelerine erişen tüm kodların uygulamanın ana iş parçacığında çalıştırılması gerekir.
Uygulamalar bazen bir Web hizmetinden veri alma gibi uzun süre çalışan işlemler gerçekleştirmek için arka plan iş parçacıklarını kullanır. Arka plan iş parçacığında çalışan kodun kullanıcı arabirimi öğelerine erişmesi gerekiyorsa, bu kodu ana iş parçacığında çalıştırması gerekir.
DeviceSınıfı, static arka plan iş parçacıklarında Kullanıcı arabirimi öğeleriyle etkileşim kurmak için kullanılabilecek aşağıdaki yöntemleri içerir:
| Yöntem | Bağımsız değişkenler | Döndürülenler | Amaç |
|---|---|---|---|
BeginInvokeOnMainThread |
Action |
void |
ActionAna iş parçacığında bir çağırır ve tamamlanmasını beklemez. |
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Func<T>Ana iş parçacığında bir çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Action |
Task |
ActionAna iş parçacığında bir çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Func<Task<T>>Ana iş parçacığında bir çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Func<Task>Ana iş parçacığında bir çağırır ve tamamlanmasını bekler. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
SynchronizationContextAna iş parçacığı için öğesini döndürür. |
Aşağıdaki kod, yönteminin kullanımına ilişkin bir örnek gösterir BeginInvokeOnMainThread :
Device.BeginInvokeOnMainThread (() =>
{
// interact with UI elements
});
Örneği indirin