Xamarin.Forms AbsoluteLayout

Örneği İndir Örneği indirme

<span sınıfı= Xamarin.Forms  AbsoluteLayout

, AbsoluteLayout açık değerleri kullanarak çocuk konumlandırmak ve boyutlarını yapmak için kullanılır. Konum, cihazdan bağımsız birimlerde alt köşenin sol üst köşesiyle, sol üst AbsoluteLayout köşesine göre belirtilir. AbsoluteLayout ayrıca orantılı bir konumlandırma ve boyutlandırma özelliği de uygulama. Buna ek olarak, diğer bazı düzen sınıflarını aksine, AbsoluteLayout altları örtüşmeleri için konumlar.

, yalnızca çocuklar için boyut dayatma mümkün olduğunda veya öğenin boyutu diğer çocukların konumunu etkilemeden kullanılacak özel amaçlı bir düzen olarak AbsoluteLayout kabul kullanılmalıdır.

sınıfı AbsoluteLayout aşağıdaki özellikleri tanımlar:

  • LayoutBounds, Rectangle türü, bir alt dosyanın konumunu ve boyutunu temsil eden ekli bir özelliktir. Bu özelliğin varsayılan değeri (0,0,AutoSize,AutoSize) değeridir.
  • LayoutFlags, türü, alt öğenin konumlanması ve boyutlanması için kullanılan düzen sınırlarının özelliklerinin orantılı olarak yorumlanıp AbsoluteLayoutFlags yorumlanmayacaklarını belirten ekli bir özelliktir. Bu özelliğin varsayılan değeri AbsoluteLayoutFlags.None olur.

Bu özellikler nesneler tarafından desteklene, bu da özelliklerin veri bağlamalarının hedefi ve BindableProperty stile sahip olması anlamına gelir. Ekli özellikler hakkında daha fazla bilgi için Xamarin.Forms Attached Properties bkz. .

sınıfı, AbsoluteLayout türünde bir özelliği tanımlayan Layout<T>Children sınıfından IList<T> türetmektedir. Childrenözelliği sınıfının ContentPropertyLayout<T> özelliğidir ve bu nedenle XAML'den açıkça ayarlanmış olması gerekmez.

İpucu

Mümkün olan en iyi düzen performansını elde etmek için Düzen performansını iyileştirme yönergelerini izleyin.

Çocuk konumu ve boyutu

'daki alt değerlerin konumu ve boyutu, mutlak değerler veya orantılı değerler kullanılarak her bir alt aya ait ekli AbsoluteLayoutAbsoluteLayout.LayoutBounds özellik ayarlandığı için tanımlanır. Konum ölçeklendirilecek olduğunda mutlak ve orantılı değerler karıştırılır, ancak boyut sabit kalarak sabit kalabilir veya tam tersi de geçerlidir. Mutlak değerler hakkında bilgi için bkz. Mutlak konumlandırma ve boyutlandırma. Orantılı değerler hakkında bilgi için bkz. Orantılı konumlandırma ve boyutlandırma.

Ekli AbsoluteLayout.LayoutBounds özellik, mutlak veya orantılı değerlerin kullan olup olmadığı bağımsız olarak iki biçim kullanılarak ayarlanır:

  • x, y. Bu biçimle, ve değerleri üst öğeye göre alt xy öğenin sol üst köşesinin konumunu gösterir. Alt sınırsızdır ve kendisini boyutlarına sahiptir.
  • x, y, width, height. Bu biçimle, ve değerleri üst öğeye göre alt öğenin sol üst köşesinin konumunu, ve değerleri ise xy alt widthheight öğenin boyutunu gösterir.

Bir alt boyutun yatay veya dikey olarak veya her ikisini birden belirtmek için width ve/veya değerlerini height Xamarin_Forms width _AbsoluteLayout_AutoSize" data-linktype="absolute-path">özelliğine AbsoluteLayout.AutoSize ayarlayın. Ancak, düzen altyapısının ek düzen hesaplamaları gerçekleştirmesi neden olduğu için bu özelliğin aşırı bir şekilde aşırılanması uygulama performansına zarar verebilir.

Önemli

Xamarin_Forms _View_HorizontalOptions" data-linktype="absolute-path">and HorizontalOptions Xamarin_Forms HorizontalOptions _View_VerticalOptions" data-linktype="absolute-path">VerticalOptions özelliklerinin bir AbsoluteLayout alt adı üzerinde hiçbir etkisi yoktur.

Mutlak konumlandırma ve boyutlandırma

Varsayılan olarak, cihazdan bağımsız birimlerde belirtilen ve düzenin içine çocukların yerleştirilmeli olduğu yeri açıkça tanımlayan mutlak değerleri kullanarak bir konum ve AbsoluteLayout boyutlar. Bu, bir koleksiyonuna alt ekleme ve her altta ekli özelliği mutlak konum ve/veya boyut değerlerine ayarlama ChildrenAbsoluteLayout ile elde AbsoluteLayout.LayoutBounds edilir.

Uyarı

Farklı cihazların ekran boyutları ve çözünürlükleri farklı olduğundan, çocukların konum ve boyutlandırması için mutlak değerlerin kullanımı sorunlu olabilir. Bu nedenle, bir cihazda ekranın ortası için koordinatlar diğer cihazlarda uzaklık olabilir.

Aşağıdaki XAML, mutlak AbsoluteLayout değerler kullanılarak konumlu olan bir'i gösterir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="AbsoluteLayoutDemos.Views.StylishHeaderDemoPage"
             Title="Stylish header demo">
    <AbsoluteLayout Margin="20">
        <BoxView Color="Silver"
                 AbsoluteLayout.LayoutBounds="0, 10, 200, 5" />
        <BoxView Color="Silver"
                 AbsoluteLayout.LayoutBounds="0, 20, 200, 5" />
        <BoxView Color="Silver"
                 AbsoluteLayout.LayoutBounds="10, 0, 5, 65" />
        <BoxView Color="Silver"
                 AbsoluteLayout.LayoutBounds="20, 0, 5, 65" />
        <Label Text="Stylish Header"
               FontSize="24"
               AbsoluteLayout.LayoutBounds="30, 25" />
    </AbsoluteLayout>
</ContentPage>

Bu örnekte, her nesnenin BoxView konumu ekli özellikte belirtilen ilk iki mutlak değer kullanılarak AbsoluteLayout.LayoutBounds tanımlanır. Her bir BoxView boyutu, üçüncü ve üçüncü ve üçüncü değerler kullanılarak tanımlanır. Nesnenin Label konumu, ekli özellikte belirtilen iki mutlak değer kullanılarak AbsoluteLayout.LayoutBounds tanımlanır. Boyut değerleri için belirtilmez ve bu nedenle Label sınırlandırilmemiştir ve kendisini boyutlarına sahiptir. Her durumda, mutlak değerler cihazdan bağımsız birimleri temsil eder.

Aşağıdaki ekran görüntüsünde sonuçta elde edilen düzen yer alenidir:

Mutlak değerler kullanılarak AbsoluteLayout'a yerleştirilen alt değerler

Eşdeğer C# kodu aşağıda gösterilmiştir:

public class StylishHeaderDemoPageCS : ContentPage
{
    public StylishHeaderDemoPageCS()
    {
        AbsoluteLayout absoluteLayout = new AbsoluteLayout
        {
            Margin = new Thickness(20)
        };

        absoluteLayout.Children.Add(new BoxView
        {
            Color = Color.Silver,
        }, new Rectangle(0, 10, 200, 5));
        absoluteLayout.Children.Add(new BoxView
        {
            Color = Color.Silver
        }, new Rectangle(0, 20, 200, 5));
        absoluteLayout.Children.Add(new BoxView
        {
            Color = Color.Silver
        }, new Rectangle(10, 0, 5, 65));
        absoluteLayout.Children.Add(new BoxView
        {
            Color = Color.Silver
        }, new Rectangle(20, 0, 5, 65));

        absoluteLayout.Children.Add(new Label
        {
            Text = "Stylish Header",
            FontSize = 24
        }, new Point(30,25));                    

        Title = "Stylish header demo";
        Content = absoluteLayout;
    }
}

Bu örnekte, her bir nesnenin konumu ve BoxView boyutu bir nesnesi kullanılarak Rectangle tanımlanır. konumu bir Label nesnesi kullanılarak Point tanımlanır.

C# içinde, yöntemini kullanarak, koleksiyonuna eklendikten sonra bir alt dosyanın konumunu ve AbsoluteLayoutChildren boyutunu ayarlamak da AbsoluteLayout.SetLayoutBounds mümkündür. Bu yöntemin ilk bağımsız değişkeni alt, ikinci bağımsız değişken ise bir Rectangle nesnesidir.

Not

Mutlak AbsoluteLayout değerler kullanan bir, düzenin sınırlarına sığmamak için alt değerleri yer ve boyuta sahip olabilir.

Orantılı konumlandırma ve boyutlandırma

Bir, AbsoluteLayout orantılı değerler kullanarak çocuk konumlarını ve boyutlarını ifade eder. Bu, koleksiyonunun koleksiyonuna altlar ekli olarak ve her altta bağlı özelliği ChildrenAbsoluteLayout 0-1 aralığındaki orantılı konum ve/veya boyut değerlerine ayararak AbsoluteLayout.LayoutBounds elde edilir. Konum ve boyut değerleri, her altta ekli AbsoluteLayout.LayoutFlags özellik ayar tarafından orantılı yapılır.

türüne bağlı özelliği, bir alt öğenin düzen sınırları konumunun ve boyut değerlerinin boyutuyla orantılı olduğunu belirten bir bayrak AbsoluteLayout.LayoutFlagsAbsoluteLayoutFlags ayarlamaya olanak AbsoluteLayout sağlar. Bir alt cihazı AbsoluteLayout uzerken, konum ve boyut değerlerini uygun şekilde herhangi bir cihaz boyutuna ölçeklendirer.

Numaralama AbsoluteLayoutFlags aşağıdaki üyeleri tanımlar:

  • None, değerlerin mutlak olarak yorumlanmayacaklarını gösterir. Bu, eklenen özelliğin varsayılan AbsoluteLayout.LayoutFlags değeridir.
  • XProportional, değerin x orantılı olarak yorumlansa da diğer tüm değerlerin mutlak olarak kabul olacağını gösterir.
  • YProportional, değerin y orantılı olarak yorumlansa da diğer tüm değerlerin mutlak olarak kabul olacağını gösterir.
  • WidthProportional, değerin width orantılı olarak yorumlansa da diğer tüm değerlerin mutlak olarak kabul olacağını gösterir.
  • HeightProportional, değerin height orantılı olarak yorumlansa da diğer tüm değerlerin mutlak olarak kabul olacağını gösterir.
  • PositionProportional, boyut değerleri xy mutlak olarak yorumlanırken ve değerlerinin orantılı olarak yorumlan olacağını gösterir.
  • SizeProportional, konum değerleri widthheight mutlak olarak yorumlanırken ve değerlerinin orantılı olarak yorumlan olacağını gösterir.
  • All, tüm değerlerin orantılı olarak yorumlan olacağını gösterir.

İpucu

Numaralama bir numaralamadır ve bu da numaralama üyelerinin AbsoluteLayoutFlagsFlags birleştirileme anlamına gelir. Bu, XAML'de virgülle ayrılmış bir liste ile ve bitwise OR işleci ile C# ile ekleyebilirsiniz.

Örneğin bayrağını kullanarak bir alt sayfanın genişliğini SizeProportional 0,25, yüksekliği 0,1 olarak ayarlarsanız, alt, genişliğin dörtte biri, yüksekliğin onunda biri AbsoluteLayout olur. Bayrağı PositionProportional benzerdir. (0,0) konumu alt kısmı sol üst köşeye, (1,1) konumu ise alt köşeyi sağ alt köşeye, (0,5,0,5) konumu ise alt köşeyi içinde AbsoluteLayout ortalar.

Aşağıdaki XAML, çocukların AbsoluteLayout orantılı değerler kullanılarak konumlandıklarını gösterir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="AbsoluteLayoutDemos.Views.ProportionalDemoPage"
             Title="Proportional demo">
    <AbsoluteLayout>
        <BoxView Color="Blue"
                 AbsoluteLayout.LayoutBounds="0.5,0,100,25"
                 AbsoluteLayout.LayoutFlags="PositionProportional" />
        <BoxView Color="Green"
                 AbsoluteLayout.LayoutBounds="0,0.5,25,100"
                 AbsoluteLayout.LayoutFlags="PositionProportional" />
        <BoxView Color="Red"
                 AbsoluteLayout.LayoutBounds="1,0.5,25,100"
                 AbsoluteLayout.LayoutFlags="PositionProportional" />
        <BoxView Color="Black"
                 AbsoluteLayout.LayoutBounds="0.5,1,100,25"
                 AbsoluteLayout.LayoutFlags="PositionProportional" />
        <Label Text="Centered text"
               AbsoluteLayout.LayoutBounds="0.5,0.5,110,25"
               AbsoluteLayout.LayoutFlags="PositionProportional" />
    </AbsoluteLayout>
</ContentPage>

Bu örnekte her alt, orantılı değerler kullanılarak konumlandı ancak mutlak değerler kullanılarak boyutlandırıldı. Bu, her alt aya ait AbsoluteLayout.LayoutFlags ekli özelliği olarak ayararak başarılı PositionProportional olur. Ekli özellikte belirtilen ilk iki değer, her alt AbsoluteLayout.LayoutBounds için orantılı değerleri kullanarak konumu tanımlar. Her alt anın boyutu, cihazdan bağımsız birimler kullanılarak üçüncü ve üçüncü mutlak değerlerle tanımlanır.

Aşağıdaki ekran görüntüsünde sonuçta elde edilen düzen yer alenidir:

Orantılı konum değerleri kullanılarak AbsoluteLayout'a yerleştirilen alt değerler

Eşdeğer C# kodu aşağıda gösterilmiştir:

public class ProportionalDemoPageCS : ContentPage
{
    public ProportionalDemoPageCS()
    {
        BoxView blue = new BoxView { Color = Color.Blue };
        AbsoluteLayout.SetLayoutBounds(blue, new Rectangle(0.5, 0, 100, 25));
        AbsoluteLayout.SetLayoutFlags(blue, AbsoluteLayoutFlags.PositionProportional);

        BoxView green = new BoxView { Color = Color.Green };
        AbsoluteLayout.SetLayoutBounds(green, new Rectangle(0, 0.5, 25, 100));
        AbsoluteLayout.SetLayoutFlags(green, AbsoluteLayoutFlags.PositionProportional);

        BoxView red = new BoxView { Color = Color.Red };
        AbsoluteLayout.SetLayoutBounds(red, new Rectangle(1, 0.5, 25, 100));
        AbsoluteLayout.SetLayoutFlags(red, AbsoluteLayoutFlags.PositionProportional);

        BoxView black = new BoxView { Color = Color.Black };
        AbsoluteLayout.SetLayoutBounds(black, new Rectangle(0.5, 1, 100, 25));
        AbsoluteLayout.SetLayoutFlags(black, AbsoluteLayoutFlags.PositionProportional);

        Label label = new Label { Text = "Centered text" };
        AbsoluteLayout.SetLayoutBounds(label, new Rectangle(0.5, 0.5, 110, 25));
        AbsoluteLayout.SetLayoutFlags(label, AbsoluteLayoutFlags.PositionProportional);

        Title = "Proportional demo";
        Content = new AbsoluteLayout
        {
            Children = { blue, green, red, black, label }
        };
    }
}

Bu örnekte, her alt anın konumu ve boyutu yöntemiyle AbsoluteLayout.SetLayoutBounds ayarlanır. yöntemine ilk bağımsız değişken alt, ikinci bağımsız değişken ise bir Rectangle nesnesidir. Her alt anın konumu orantılı değerlerle ayarlanırken, her bir altın boyutu cihazdan bağımsız birimler kullanılarak mutlak değerlerle ayarlanır.

Not

Orantılı AbsoluteLayout değerler kullanan bir, 0-1 aralığının dışındaki değerleri kullanarak düzenin sınırlarına sığmamak için alt değerleri yer ve boyuta sahip olabilir.