खोज…


टिप्पणियों

इस मामले में ForceLayout का उपयोग

लेबल और बटन का आकार उनके अंदर के पाठ के अनुसार बदल जाता है। इसलिए जब बच्चों को लेआउट में जोड़ा जाता है, तो उनका आकार चौड़ाई और ऊंचाई दोनों में 0 रहता है। उदाहरण के लिए:

relativeLayout.Children.Add(label,
    Constraint.RelativeToParent(parent => label.Width));

उपरोक्त अभिव्यक्ति 0 पर वापस आ जाएगी क्योंकि वर्तमान में चौड़ाई 0 है। इसके चारों ओर काम करने के लिए, हमें SizeChanged ईवेंट के लिए सुनने की आवश्यकता है और जब आकार बदलता है, तो हमें इसे फिर से करने के लिए लेआउट को मजबूर करना चाहिए।

label.SizeChanged += (s, e) => relativeLayout.ForceLayout();

BoxView जैसे दृश्य के लिए यह अनावश्यक है। क्योंकि हम तात्कालिकता पर उनके आकार को परिभाषित कर सकते हैं। अन्य चीजें हैं, दोनों ही मामलों में हम उनकी चौड़ाई और ऊंचाई को एक बाधा के रूप में परिभाषित कर सकते हैं जब हम उन्हें लेआउट में जोड़ रहे हैं। उदाहरण के लिए:

relativeLayout.Children.Add(label,
    Constraint.Constant(0),
    Constraint.Constant(0),
    //Width constraint
    Constraint.Constant(30),
    //Height constraint
    Constraint.Constant(40));

यह लेबल को बिंदु 0 में जोड़ देगा। 0. लेबल की चौड़ाई और ऊंचाई 30 और 40 होगी। हालांकि, यदि पाठ बहुत लंबा है, तो इसमें से कुछ नहीं दिखा सकता है। यदि आपके लेबल में ऊँचाई है या हो सकती है, तो आप लेबल के LineBreakMode गुण का उपयोग कर सकते हैं। जो पाठ को लपेट सकता है। LineBreakMode enum में बहुत सारे विकल्प हैं।

बीच पर एक साधारण लेबल वाला पेज

यहाँ छवि विवरण दर्ज करें

public class MyPage : ContentPage
{
    RelativeLayout _layout;
    Label MiddleText;

    public MyPage()
    {
        _layout = new RelativeLayout();

        MiddleText = new Label
        {
            Text = "Middle Text"
        };

        MiddleText.SizeChanged += (s, e) =>
        {
            //We will force the layout so it will know the actual width and height of the label
            //Otherwise width and height of the label remains 0 as far as layout knows
            _layout.ForceLayout();
        };

        _layout.Children.Add(MiddleText
            Constraint.RelativeToParent(parent => parent.Width / 2 - MiddleText.Width / 2),
            Constraint.RelativeToParent(parent => parent.Height / 2 - MiddleText.Height / 2));

        Content = _layout;
    }
}

बॉक्स के बाद बॉक्स

यहाँ छवि विवरण दर्ज करें

public class MyPage : ContentPage
{
    RelativeLayout _layout;

    BoxView centerBox;
    BoxView rightBox;
    BoxView leftBox;
    BoxView topBox;
    BoxView bottomBox;

    const int spacing = 10;
    const int boxSize = 50;

    public MyPage()
    {
        _layout = new RelativeLayout();

        centerBox = new BoxView
        {
            BackgroundColor = Color.Black
        };

        rightBox = new BoxView
        {
            BackgroundColor = Color.Blue,
            //You can both set width and hight here
            //Or when adding the control to the layout
            WidthRequest = boxSize,
            HeightRequest = boxSize
        };

        leftBox = new BoxView
        {
            BackgroundColor = Color.Yellow,
            WidthRequest = boxSize,
            HeightRequest = boxSize
        };

        topBox = new BoxView
        {
            BackgroundColor = Color.Green,
            WidthRequest = boxSize,
            HeightRequest = boxSize
        };

        bottomBox = new BoxView
        {
            BackgroundColor = Color.Red,
            WidthRequest = boxSize,
            HeightRequest = boxSize
        };

        //First adding center box since other boxes will be relative to center box
        _layout.Children.Add(centerBox,
            //Constraint for X, centering it horizontally
            //We give the expression as a paramater, parent is our layout in this case
            Constraint.RelativeToParent(parent => parent.Width / 2 - boxSize / 2),
            //Constraint for Y, centering it vertically
            Constraint.RelativeToParent(parent => parent.Height / 2 - boxSize / 2),
            //Constraint for Width
            Constraint.Constant(boxSize),
            //Constraint for Height
            Constraint.Constant(boxSize));

        _layout.Children.Add(leftBox,
            //The x constraint will relate on some level to centerBox
            //Which is the first parameter in this case
            //We both need to have parent and centerBox, which will be called sibling,
            //in our expression paramters
            //This expression will be our second paramater
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.X - spacing - boxSize),
            //Since we only need to move it left, 
            //it's Y constraint will be centerBox' position at Y axis
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.Y)
            //No need to define the size constraints
            //Since we initialize them during instantiation
        );

        _layout.Children.Add(rightBox,
            //The only difference hear is adding spacing and boxSize instead of substracting them
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.X + spacing + boxSize),
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.Y)
        );

        _layout.Children.Add(topBox,
            //Since we are going to move it vertically this thime
            //We need to do the math on Y Constraint
            //In this case, X constraint will be centerBox' position at X axis
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.X),
            //We will do the math on Y axis this time
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.Y  - spacing - boxSize)
        );

        _layout.Children.Add(bottomBox,
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.X),
            Constraint.RelativeToView(centerBox, (parent, sibling) => sibling.Y + spacing + boxSize)
        );

        Content = _layout;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow