Xamarin.Forms Cihaz Sınıfı
sınıfı, Device
geliştiricilerin düzeni ve işlevselliği platform temelinde özelleştirmesine yardımcı olacak bir dizi özellik ve yöntem içerir.
Sınıfı, belirli donanım türleri ve boyutlarında kodu hedeflemeye yönelik yöntemlere ve özelliklere ek olarak, Device
arka plan iş parçacıklarından kullanıcı arabirimi denetimleriyle etkileşime geçmek için kullanılabilecek yöntemler içerir. Daha fazla bilgi için bkz . Arka plan iş parçacıklarından kullanıcı arabirimiyle etkileşim kurma.
Platforma özgü değerler sağlama
2.3.4'e Xamarin.Forms kadar uygulamanın üzerinde çalıştığı platform, özelliği incelenip Device.OS
, TargetPlatform.Android
, TargetPlatform.WinPhone
ve TargetPlatform.Windows
numaralandırma değerleriyle karşılaştırılarak TargetPlatform.iOS
elde edilebilirdi. Benzer şekilde, aşırı yüklemelerden biri Device.OnPlatform
bir denetime platforma özgü değerler sağlamak için kullanılabilir.
Ancak, 2.3.4'ten bu yana Xamarin.Forms bu API'ler kullanım dışı bırakıldı ve değiştirildi. sınıfı Device
artık , , Device.WinPhone
Device.Android
(kullanım dışı), (kullanım Device.UWP
dışı), Device.WinRT
ve Device.macOS
platformlarını Device.iOS
tanımlayan genel dize sabitleri içerir. Benzer şekilde, Device.OnPlatform
aşırı yüklemeler ve On
API'leriyle OnPlatform
değiştirilmiştir.
C# dilinde, platforma özgü değerler özelliğinde Device.RuntimePlatform
bir switch
deyim oluşturulup gerekli platformlar için deyimler sağlanarak case
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);
OnPlatform
ve 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>
OnPlatform
sınıfı, hedef türle eşleşen bir öznitelikle örneği oluşturulacak genel bir x:TypeArguments
sınıftır. On
sınıfında özniteliği tek Platform
string
bir değeri veya birden çok virgülle ayrılmış string
değeri kabul edebilir.
Önemli
sınıfında yanlış Platform
öznitelik değeri On
sağlanması hataya neden olmaz. Bunun yerine kod, platforma özgü değer uygulanmadan yürütülür.
Alternatif olarak, OnPlatform
işaretleme uzantısı platform başına kullanıcı arabirimi görünümünü özelleştirmek için XAML'de kullanılabilir. Daha fazla bilgi için bkz . OnPlatform biçimlendirme uzantısı.
Device.Idiom
özelliği, Device.Idiom
uygulamanın üzerinde çalıştığı cihaza bağlı olarak düzenleri veya işlevleri değiştirmek için kullanılabilir. Numaralandırma TargetIdiom
aşağıdaki değerleri içerir:
- Telefon – iPhone, iPod touch ve Android cihazlar 600 dipten daha dar^
- Tablet – 600 dipten daha geniş iPad, Windows cihazları ve Android cihazlar^
- Masaüstü – yalnızca Windows 10 masaüstü bilgisayarlardaki UWP uygulamalarında döndürülür (Continuum senaryoları dahil olmak üzere mobil Windows cihazlarında döndürülür
Phone
) - TV – Tizen TV cihazları
- İzleme – Tizen watch cihazları
- Desteklenmeyen – kullanılmayan
^ dips mutlaka fiziksel piksel sayısı değildir
Idiom
özelliği özellikle aşağıdaki gibi daha büyük ekranlardan yararlanan düzenler oluşturmak için kullanışlıdır:
if (Device.Idiom == TargetIdiom.Phone) {
// layout views vertically
} else {
// layout views horizontally for a larger display (tablet or desktop)
}
sınıfı, OnIdiom
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>
OnIdiom
sınıfı, hedef türle eşleşen bir öznitelikle örneği oluşturulacak genel bir x:TypeArguments
sınıftır.
Alternatif olarak, OnIdiom
işaretleme uzantısı, uygulamanın üzerinde çalıştığı cihazın deyimine göre kullanıcı arabirimi görünümünü özelleştirmek için XAML'de kullanılabilir. Daha fazla bilgi için bkz . OnIdiom biçimlendirme uzantısı.
Device.FlowDirection
değeri, Device.FlowDirection
cihaz tarafından kullanılan geçerli akış yönünü temsil eden bir FlowDirection
numaralandırma değeri alır. Akış yönü, sayfadaki kullanıcı arabirimi öğelerinin gözle tarandığı yöndür. Numaralandırma değerleri şunlardır:
XAML'de değer, Device.FlowDirection
işaretleme uzantısı kullanılarak x:Static
alınabilir:
<ContentPage ... FlowDirection="{x:Static Device.FlowDirection}"> />
C# dilinde eşdeğer kod:
this.FlowDirection = Device.FlowDirection;
Akış yönü hakkında daha fazla bilgi için bkz . Sağdan sola Yerelleştirme.
Device.Styles
özelliği,Styles
bazı denetimlerin (örneğinLabel
) Style
özelliğine uygulanabilen yerleşik stil tanımları içerir. Kullanılabilir stiller şunlardır:
- BodyStyle
- CaptionStyle
- ListItemDetailTextStyle
- ListItemTextStyle
- SubtitleStyle
- TitleStyle
Device.GetNamedSize
GetNamedSize
C# kodunda ayarlarken FontSize
kullanılabilir:
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, açık veya koyu) etkin olduğuna bağlı olarak farklı bir değere sahip olan bir renktir. Android'de adlandırılmış renklere R.Color sınıfı aracılığıyla erişilir. iOS'ta, adlandırılmış renkler sistem renkleri olarak adlandırılır. Evrensel Windows Platformu adlandırılmış renkler XAML tema kaynakları olarak adlandırılır.
GetNamedColor
yö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 döndürür Color
:
// Retrieve an Android named color
Color color = Device.GetNamedColor(NamedPlatformColor.HoloBlueBright);
Color.Default
bir renk adı bulunamadığında veya desteklenmeyen bir platformda çağrıldığında GetNamedColor
döndürülür.
Not
GetNamedColor
yöntemi bir platforma özgü bir Color
döndürdüğünden, genellikle özelliğiyle Device.RuntimePlatform
birlikte kullanılmalıdır.
sınıfı, NamedPlatformColor
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 |
Device.StartTimer
sınıfıDevice
, .NET Standard kitaplığı da dahil olmak üzere ortak kodda Xamarin.Forms çalışan zamana bağlı görevleri tetiklemenin basit bir yolunu sağlayan bir yönteme de sahiptirStartTimer
. Aralığı ayarlamak için bir TimeSpan
geçirin ve zamanlayıcıyı çalışır durumda tutmak veya false
geçerli çağrıdan sonra durdurmak için döndürtrue
.
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şim kuruyorsa (örneğin, bir Label
metnini ayarlama veya uyarı görüntüleme) bir ifade içinde BeginInvokeOnMainThread
yapılmalıdır (aşağıya bakın).
Not
System.Timers.Timer
ve System.Threading.Timer
sınıfları, yöntemini kullanmaya Device.StartTimer
yönelik .NET Standard alternatifleridir.
Arka plan iş parçacıklarından kullanıcı arabirimiyle etkileşim kurma
iOS, Android ve Evrensel Windows Platformu dahil olmak üzere çoğu işletim sistemi, kullanıcı arabirimini içeren kod için tek iş parçacıklı bir model 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ı gerektiğidir.
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.
sınıfı, Device
arka plan iş parçacıklarından kullanıcı arabirimi öğeleriyle etkileşime geçmek için kullanılabilecek aşağıdaki static
yöntemleri içerir:
Metot | Bağımsız değişkenler | Döndürülenler | Purpose |
---|---|---|---|
BeginInvokeOnMainThread |
Action |
void |
Ana iş parçacığında bir Action çağırır ve tamamlanmasını beklemez. |
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Ana iş parçacığında bir Func<T> çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Action |
Task |
Ana iş parçacığında bir Action çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Ana iş parçacığında bir Func<Task<T>> çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Ana iş parçacığında bir Func<Task> çağırır ve tamamlanmasını bekler. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
Ana iş parçacığı için değerini SynchronizationContext döndürür. |
Aşağıdaki kodda yöntemini kullanma örneği gösterilmektedir BeginInvokeOnMainThread
:
Device.BeginInvokeOnMainThread (() =>
{
// interact with UI elements
});