Aracılığıyla paylaş


Bölüm 14'ün özeti. Mutlak düzen

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.

gibi StackLayout, AbsoluteLayout öğesinden Layout<View> türetilir ve bir Children özelliği devralır. AbsoluteLayout programcının alt öğelerinin konumlarını ve isteğe bağlı olarak boyutlarını belirtmesini gerektiren bir düzen sistemi uygular. Konum, cihazdan bağımsız birimlerde çocuğun sol üst köşesine AbsoluteLayout göre belirtilir. AbsoluteLayout ayrıca orantılı bir konumlandırma ve boyutlandırma özelliği de uygular.

AbsoluteLayout yalnızca programcı alt öğelere boyut uygulayabildiğinde (örneğin, BoxView öğeler) veya öğenin boyutu diğer alt öğelerin konumunu etkilemediğinde kullanılacak özel amaçlı bir düzen sistemi olarak kabul edilmelidir. HorizontalOptions ve VerticalOptions özelliklerinin bir öğesinin alt öğeleri üzerinde hiçbir AbsoluteLayoutetkisi yoktur.

Bu bölümde ayrıca, bir sınıfta tanımlanan özelliklerin (bu örnekteAbsoluteLayout) başka bir sınıfa (alt öğesi) eklenmesine izin veren ekli bağlanabilir özelliklerin AbsoluteLayoutönemli özelliği tanıtılır.

Kodda AbsoluteLayout

Standart Add yöntemi kullanarak bir AbsoluteLayout alt Children öğeyi koleksiyonuna ekleyebilirsiniz, ancak AbsoluteLayout aynı zamanda bir belirtmenize olanak sağlayan genişletilmiş Add bir Rectangleyöntem de sağlar. Başka bir Add yöntem yalnızca bir Pointgerektirir, bu durumda çocuk kısıtlanmamıştır ve kendisini boyutlandırıyor.

Dört değer gerektiren bir oluşturucuyla bir Rectangle değer oluşturabilirsiniz; ilk ikisi çocuğun üst köşesine göre sol üst köşesinin konumunu ve ikinci ikisi de çocuğun boyutunu gösterir. Veya ve değeri gerektiren Point bir Size oluşturucu kullanabilirsiniz.

Bu Add yöntemler, değerleri kullanan öğeleri ve yalnızca Point bir değer kullanan Rectangle bir Label öğeyi konumlandıran BoxView AbsoluteDemo'da gösterilir.

ChessboardFixed örneği, satranç tahtası desenini oluşturmak için 32 BoxView öğe kullanır. Program, öğelere BoxView 35 birim kare sabit kodlanmış bir boyut verir. öğesinin AbsoluteLayout HorizontalOptions ve değeri olarak ayarlanmıştır LayoutOptions.Centerve VerticalOptions bu da toplam boyutunun 280 birim kare olmasına neden olurAbsoluteLayout.

Ekli bağlanabilir özellikler

Ayrıca, statik yöntemi AbsoluteLayout.SetLayoutBoundskullanılarak koleksiyona eklendikten Children sonra bir alt öğesinin AbsoluteLayout konumunu ve isteğe bağlı olarak boyutunu ayarlamak da mümkündür. İlk bağımsız değişken alt değişkendir; ikincisi bir Rectangle nesnedir. Genişlik ve yükseklik değerlerini sabit olarak ayarlayarak alt çocuğun kendisini yatay ve/veya dikey olarak boyutlandıracağını AbsoluteLayout.AutoSize belirtebilirsiniz.

ChessboardDynamic örneği, mümkün olduğunca büyük olmaları için tüm alt öğeleri çağırmak AbsoluteLayout.SetLayoutBounds için bir ContentView işleyici ile SizeChanged öğesini yerleştirirAbsoluteLayout.

Tanımlayan ekli bağlanabilir özellikAbsoluteLayout, adlı AbsoluteLayout.LayoutBoundsPropertytürün BindableProperty statik salt okunur alanıdır. Statik AbsoluteLayout.SetLayoutBounds yöntem, ile AbsoluteLayout.LayoutBoundsPropertyalt öğesinde çağrılarak SetValue uygulanır. Alt öğe, ekli bağlanabilir özelliğin ve değerinin depolandığı bir sözlük içerir. düzen sırasında, AbsoluteLayout çağrısıyla GetValue uygulanan öğesini çağırarak AbsoluteLayout.GetLayoutBoundsbu değeri elde edebilir.

Orantılı boyutlandırma ve konumlandırma

AbsoluteLayout orantılı bir boyutlandırma ve konumlandırma özelliği uygular. sınıfı, LayoutFlagsPropertyilgili statik yöntemler AbsoluteLayout.SetLayoutFlags ve AbsoluteLayout.GetLayoutFlagsile ekli ikinci bir bağlanabilir özellik tanımlar.

bağımsız değişkeni AbsoluteLayout.SetLayoutFlags ve dönüş değeri AbsoluteLayout.GetLayoutFlags , türündeki AbsoluteLayoutFlagsbir değerdir ve aşağıdaki üyelere sahip bir numaralandırmadır:

Bunları C# bit düzeyinde OR işleciyle birleştirebilirsiniz.

Bu bayraklar ayarlandığında, alt öğeyi Rectangle konumlandırmak ve boyutlandırmak için kullanılan düzen sınırları yapısının belirli özellikleri orantılı olarak yorumlanır.

WidthProportional Bayrak ayarlandığında, Width 1 değeri alt öğesinin ile aynı genişlikte AbsoluteLayoutolduğu anlamına gelir. Yükseklik için benzer bir yaklaşım kullanılır.

Orantılı konumlandırma boyutu hesaba katıyor. XProportional Bayrak ayarlandığında, X düzen sınırlarının Rectangle özelliği orantılıdır. 0 değeri, çocuğun sol kenarının AbsoluteLayoutöğesinin sol kenarına konumlandırıldığını, ancak 1 konumunun, çocuğun sağ kenarının AbsoluteLayout, beklediğiniz gibi sağ kenarının AbsoluteLayout dışında değil, sağ kenarında konumlandırıldığını gösterir. X 0,5'in bir özelliği, çocuğu içinde yatay olarak ortalarAbsoluteLayout.

ChessboardProportional örneği orantılı boyutlandırma ve konumlandırma kullanımını gösterir.

Orantılı koordinatlarla çalışma

Bazen, orantılı konumlandırmayı uygulamasında uygulanandan AbsoluteLayoutfarklı düşünmek daha kolaydır. 1 özelliğinin çocuğun sol kenarını (sağ kenar yerine) sağ kenarına AbsoluteLayoutkonumlandırdığı X orantılı koordinatlarla çalışmayı tercih edebilirsiniz.

Bu alternatif konumlandırma düzeni "kesirli alt koordinatlar" olarak adlandırılabilir. Kesirli alt koordinatlardan aşağıdaki formülleri kullanmak için AbsoluteLayout gereken düzen sınırlarına dönüştürebilirsiniz:

layoutBounds.X = (fractionalChildCoordinate.X / (1 - layoutBounds.Width))

layoutBounds.Y = (fractionalChildCoordinate.Y / (1 - layoutBounds.Height))

ProportionalCoordinateCalc örneği bunu gösterir.

AbsoluteLayout ve XAML

XAML'de bir AbsoluteLayout kullanabilir ve ve AbsoluteLayout.LayoutFlagsöznitelik değerlerini AbsoluteLayout.LayoutBounds kullanan bir AbsoluteLayout öğesinin alt öğelerinde ekli bağlanabilir özellikleri ayarlayabilirsiniz. Bu, AbsoluteXamlDemo ve ChessboardXaml örneklerinde gösterilmiştir. İkinci program 32 BoxView öğe içerir, ancak işaretlemeyi AbsoluteLayout.LayoutFlags en düşük düzeyde tutmak için özelliğini içeren örtük Style bir kullanır.

XAML'de sınıf adı, nokta ve özellik adından oluşan bir öznitelik her zaman ekli bağlanabilir bir özelliktir.

Bindirmeler

Belki de kullanıcıyı sayfadaki normal denetimlerle etkileşime geçmekten korumak için, sayfayı diğer denetimlerle kapsayan bir katman oluşturmak için kullanabilirsinizAbsoluteLayout.

SimpleOverlay örneği bu tekniği gösterir ve ayrıca bir programın bir görevi ne ölçüde tamamladığını gösteren öğesini gösterirProgressBar.

Biraz eğlence

DotMatrixClock örneği, sanal 5x7 noktalı matris görüntüsüyle geçerli saati görüntüler. Her nokta bir BoxView (228 tane vardır) boyutundadır ve üzerinde AbsoluteLayoutkonumlandırılır.

Nokta matris saatinin üçlü ekran görüntüsü

BouncingText programı, ekranda yatay ve dikey olarak zıplamak için iki Label nesneye animasyon ekler.