Aracılığıyla paylaş


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.WinPhoneve TargetPlatform.Windows numaralandırma değerleriyle karşılaştırılarak TargetPlatform.iOSelde 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.WinPhoneDevice.Android(kullanım dışı), (kullanım Device.UWPdışı), Device.WinRT ve Device.macOSplatformlarını Device.iOStanı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 Platformstring 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 – i Telefon, 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ürPhone)
  • 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,Stylesbazı 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
});