Aracılığıyla paylaş


Bölüm 2'nin özeti. Bir uygulamanın anatomisi

Not

Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.

Bir Xamarin.Forms uygulamada, ekranda yer kaplayan nesneler, sınıf tarafından VisualElement kapsüllenmiş görsel öğeler olarak bilinir. Görsel Öğeler, bu sınıflara karşılık gelen üç kategoriye ayrılabilir:

Türev Page tüm ekranı veya neredeyse tüm ekranı kaplar. Genellikle, bir sayfanın alt öğesi, alt görsel öğeleri düzenlemeye yönelik bir Layout türevdir. alt Layout öğeleri, metin, bit eşlemler, kaydırıcılar, düğmeler, liste kutuları gibi tanıdık nesneler olan diğer Layout sınıflar veya View türevler (genellikle öğeler olarak adlandırılır) olabilir.

Bu bölümde, metni görüntüleyen türev olan öğesine odaklanarak Labelbir uygulamanın nasıl oluşturulacağı gösterilmektedir View .

Merhaba deyin

Xamarin platformu yüklü olduğunda, Visual Studio'da veya Mac için Visual Studio yeni Xamarin.Forms bir çözüm oluşturabilirsiniz. Hello çözümü ortak kod için Taşınabilir Sınıf Kitaplığı kullanır.

Not

Taşınabilir Sınıf Kitaplıklarının yerini .NET Standart kitaplıkları aldı. Kitaptaki tüm örnek kodlar .NET standart kitaplıklarını kullanacak şekilde dönüştürüldü.

Bu örnek, Visual Studio'da hiçbir değişiklik yapmadan oluşturulmuş bir Xamarin.Forms çözümü gösterir. Çözüm dört projeden oluşur:

  • Merhaba, diğer projeler tarafından paylaşılan Taşınabilir Sınıf Kitaplığı (PCL)
  • Hello.Droid, Android için bir uygulama projesi
  • Hello.iOS, iOS için bir uygulama projesi
  • Hello.UWP, Evrensel Windows Platformu için bir uygulama projesi (Windows 10 ve Windows 10 Mobile)

Not

Xamarin.Forms artık Windows 8.1, Windows Phone 8.1 veya Windows 10 Mobile'ı desteklemez, ancak Xamarin.Forms uygulamalar Windows 10 masaüstünde çalıştırılır.

Bu uygulama projelerinden herhangi birini başlangıç projesi yapabilir ve ardından programı bir cihazda veya simülatörde derleyip çalıştırabilirsiniz.

Programlarınızın Xamarin.Forms çoğunda uygulama projelerini değiştirmeyeceksiniz. Bunlar genellikle yalnızca programı başlatmak için küçük saplamalar olarak kalır. Odak noktanızın çoğu, tüm uygulamalar için ortak olan kitaplık olacaktır.

Dosyaların içinde

Hello programı tarafından görüntülenen görseller sınıfın App oluşturucusunda tanımlanır. App sınıfından Xamarin.Forms Applicationtüretilir.

Not

XAML dosyası içeren bir sayfa oluşturmak için Xamarin.Forms Visual Studio çözüm şablonları. XAML, Bölüm 7'ye kadar bu kitapta ele alınmaz.

Hello PCL projesinin References bölümü aşağıdaki Xamarin.Forms derlemeleri içerir:

  • Xamarin.Forms. Göbek
  • Xamarin.Forms. Xaml
  • Xamarin.Forms. Peron

Beş uygulama projesinin Başvurular bölümleri, tek tek platformlar için geçerli olan ek derlemeleri içerir:

  • Xamarin.Forms. Platform.Android
  • Xamarin.Forms. Platform.iOS
  • Xamarin.Forms. Platform.UWP
  • Xamarin.Forms. Platform.WinRT
  • Xamarin.Forms. Platform.WinRT.Tablet
  • Xamarin.Forms. Platform.WinRT.Phone

Not

Bu projelerin Başvurular bölümleri artık derlemeleri listelemez. Bunun yerine, proje dosyası NuGet paketine Xamarin.Forms başvuran bir PackageReference etiketi içerir. Visual Studio'daki Başvurular bölümünde derlemeler yerine Xamarin.Forms paket listelenirXamarin.Forms.

Uygulama projelerinin her biri, ad alanında Xamarin.Forms statik Forms.Init yönteme bir çağrı içerir. Bu işlem Xamarin.Forms kitaplığı başlatır. Her platform için farklı bir Forms.Init sürümü tanımlanır. Bu yönteme yapılan çağrılar aşağıdaki sınıflarda bulunabilir:

Ayrıca, her platformun paylaşılan kitaplıkta App sınıf konumunu örneklemesi gerekir. Bu, aşağıdaki sınıflarda bir LoadApplication çağrısında gerçekleşir:

Aksi takdirde, bu uygulama projeleri normal "hiçbir şey yapma" programlarıdır.

PCL mi, SAP mi?

Taşınabilir Sınıf Kitaplığı'nda (PCL) veya Paylaşılan Varlık Projesi'nde (SAP) ortak kodla bir çözüm oluşturmak Xamarin.Forms mümkündür. SAP çözümü oluşturmak için Visual Studio'da Paylaşılan seçeneğini belirleyin. HelloSap çözümü, SAP şablonunu hiçbir değişiklik yapmadan gösterir.

Not

Taşınabilir Sınıf Kitaplıklarının yerini .NET Standart kitaplıkları almıştır. Kitaptaki tüm örnek kodlar .NET standart kitaplıklarını kullanacak şekilde dönüştürüldü. Aksi takdirde, PCL ve .NET Standart kitaplıkları kavramsal olarak çok benzerdir.

Kitaplık yaklaşımı, platform uygulaması projeleri tarafından başvuruda bulunan bir kitaplık projesindeki tüm ortak kodları paketler. SAP yaklaşımıyla ortak kod tüm platform uygulaması projelerinde etkili bir şekilde bulunur ve bunlar arasında paylaşılır.

Çoğu Xamarin.Forms geliştirici kitaplık yaklaşımını tercih eder. Bu kitapta, çözümlerin çoğu bir kitaplık kullanmaktadır. SAP kullananlar proje adında bir Sap soneki içerir.

SAP yaklaşımıyla paylaşılan projedeki kod, C# ön işlemci yönergelerini (#if, #elifve #endif) bu önceden tanımlanmış tanımlayıcılarla kullanarak çeşitli platformlar için farklı kod yürütebilir:

  • Ios: __IOS__
  • Android: __ANDROID__
  • UWP: WINDOWS_UWP

Paylaşılan kitaplıkta, bu bölümün ilerleyen bölümlerinde göreceğiniz gibi çalışma zamanında hangi platformda çalıştığınızı belirleyebilirsiniz.

Metin etiketleri

Greetings çözümü, Greetings projesine yeni bir C# dosyasının nasıl ekleneceğini gösterir. Bu dosya, öğesinden ContentPagetüretilen adlı GreetingsPage bir sınıf tanımlar. Bu kitapta, çoğu proje, adı son ekli Page projenin adı olan tek ContentPage bir türev içerir.

Oluşturucu GreetingsPage , metin görüntüleyen görünüm olan bir Label görünümün örneğini Xamarin.Forms oluşturur. Text özelliği, tarafından görüntülenen metne Labelayarlanır. Bu program özelliğini Label Content ContentPageolarak ayarlar. Sınıfının oluşturucusunun App GreetingsPage örneği oluşturulur ve özelliğine MainPage ayarlır.

Metin, sayfanın sol üst köşesinde görüntülenir. iOS'ta bu, sayfanın durum çubuğuyla örtüştüğü anlamına gelir. Bu sorunun birkaç çözümü vardır:

Çözüm 1. Sayfaya doldurmayı dahil et

Sayfada bir Padding özellik ayarlayın. Padding türündedir Thicknessve dört özelliğe sahip bir yapıdır:

Padding , sayfanın içinde içeriğin dışlandığı bir alanı tanımlar. Bu, Label iOS durum çubuğunun üzerine yazılmasını önlemeye olanak tanır.

Çözüm 2. Yalnızca iOS için doldurmayı dahil edin (yalnızca SAP)

C# önişlemci yönergesi olan bir SAP kullanarak yalnızca iOS'ta 'Padding' özelliğini ayarlayın. Bu, GreetingsSap çözümünde gösterilmiştir.

Çözüm 3. Yalnızca iOS (PCL veya SAP) için doldurmayı dahil edin

Kitap için kullanılan sürümündeXamarin.Forms, Padding pcl veya SAP'de iOS'a özgü bir özellik veya Device.OnPlatform<T> statik yöntemi kullanılarak Device.OnPlatform seçilebilir. Bu yöntemler artık kullanım dışı bırakıldı

Device.OnPlatform Yöntemler platforma özgü kodu çalıştırmak veya platforma özgü değerleri seçmek için kullanılır. Dahili olarak, sabit listesi üyesini TargetPlatform döndüren statik salt okunur özelliğini kullanırlarDevice.OS:

Yöntemlerin Device.OnPlatform , özelliğin Device.OS ve numaralandırmanın TargetPlatform tümü artık kullanım dışıdır. Bunun yerine özelliğini kullanın Device.RuntimePlatform ve dönüş değerini aşağıdaki statik alanlarla karşılaştırın string :

  • iOS, "iOS" dizesi
  • Android, "Android" dizesi
  • UWP, Evrensel Windows Platformu başvuran "UWP" dizesi

Statik Device.Idiom salt okunur özelliği ilişkilidir. Bu, şu üyelere sahip olan öğesinin TargetIdiombir üyesini döndürür:

iOS ve Android için ile Phone arasındaki Tablet kesme, 600 birimlik dikey bir genişliktir. Windows platformu için, Desktop Windows 10 altında çalışan bir UWP uygulamasını ve Phone Windows 10 uygulaması altında çalışan bir UWP uygulamasını gösterir.

Çözüm 3a. Etikette kenar boşluğu ayarlama

Margin Özellik kitaba dahil edilemeyecek kadar geç tanıtıldı, ancak aynı zamanda türündedir Thickness ve görünümün düzeninin hesaplamasına dahil edilen görünümün dışında bir alan tanımlamak için üzerinde ayarlayabilirsinizLabel.

Tesis Padding yalnızca ve Page türevleri üzerinde Layout kullanılabilir. Tesis Margin tüm View türevlerinde mevcuttur.

Çözüm 4. Etiketi sayfanın içinde ortalama

öğesinin Label ve VerticalOptions özelliklerini Label türünde LayoutOptionsbir değere ayarlayarak öğesinin içini HorizontalOptions Page ortalayabilir (veya sekiz yerden birine yerleştirebilirsiniz). Yapısı LayoutOptions iki özelliği tanımlar:

  • türündeki LayoutAlignmentbir özellik, dört üyeli bir numaralandırma: Start, yönlendirmeye bağlı olarak sol veya üst anlamına gelir, CenterEndyönlendirmeye bağlı olarak sağ veya alt anlamına gelir ve Fill.Alignment

  • türünde boolbir Expands özellik.

Genellikle bu özellikler doğrudan kullanılmaz. Bunun yerine, bu iki özelliğin birleşimleri türündeki LayoutOptionssekiz statik salt okunur özellik tarafından sağlanır:

HorizontalOptions ve VerticalOptions düzendeki Xamarin.Forms en önemli özelliklerdir ve Bölüm 4'te daha ayrıntılı olarak ele alınır. Yığını kaydırma.

her ikisinin ve VerticalOptions özelliklerinin Label değerine ayarlandığı LayoutOptions.Centersonuç HorizontalOptions aşağıdadır:

Karşılama programının üçlü ekran görüntüsü

Çözüm 5. Etiketin içindeki metni ortalama

ve özelliklerini Label numaralandırmanın bir üyesine TextAlignment ayarlayarak HorizontalTextAlignment VerticalTextAlignment metni ortalayabilir (veya sayfadaki sekiz başka konuma yerleştirebilirsiniz):

  • Start, sol veya üst anlamına gelir (yönlendirmeye bağlı olarak)
  • Center
  • End, sağ veya alt anlamına gelir (yönlendirmeye bağlı olarak)

Bu iki özellik yalnızca tarafından Labeltanımlanırken HorizontalAlignment ve VerticalAlignment özellikleri tarafından tanımlanır View ve tüm View türevler tarafından devralınır. Görsel sonuçları benzer görünebilir, ancak sonraki bölümde gösterildiği gibi çok farklıdır.