Xamarin Forms-AbsoluteLayout-как работает позиции


Я работаю с Xamarin.Формы с абсолютным отсутствием, однако, я не уверен, что понимаю, как работает позиционирование элементов.

Я работаю с пропорциональными значениями, поэтому, если я помещаю элемент в AbsoluteLayout.LayoutBounds="1, 0.05, 0.15, 0.1" , где каждое значение пропорционально (поэтому флаги "все" AbsoluteLayout.LayoutFlags="All")

Он будет размещен в верхней / правой части экрана. Однако это не займет места немного снаружи. Так что же это значит? Каждый элемент перемещается в экран, если они идут снаружи?

Введите описание изображения здесь

Но теперь, когда вы размещаете элемент, возникает другой вопрос, на чем основано положение X/Y? Есть ли центр или другая точка?

Введите описание изображения здесь

В этом примере я попытался использовать 0.15, но рендеринг был немного странным, поэтому я поставил 0, а затем рендеринг совпал с тем, что я хочу.

Вы можете сказать: "проверьте это, и вы увидите."однако, это пустая трата времени для дизайнера и меня, чтобы расположить все элементы, потому что мы не уверен, что понимаю, как это работает. Так что мы просто сделаем попытку с отладкой..

Мы также ищем, чтобы узнать, существует ли программное обеспечение, чтобы генерировать позиции о дизайне, сделанном дизайнером. Мы имеем в виду положение X/Y элемента в процентах.

Заранее благодарю !

3 7

3 ответа:

С AbsoluteLayoutFlag.Все параметры границ прямоугольника имеют следующее значение:

  • x означает процент оставшегося пространства (т. е. родительская ширина-ширина элемента управления), которое должно быть слева от элемента управления
  • y означает процент оставшегося пространства (т. е. родительская высота-Контрольная высота), которое должно находиться в верхней части элемента управления
  • ширина-это ширина элемента управления в процентах от родительской ширины
  • высота-это высота элемента управления в процент родительской высоты

Ширина и высота - это то, что люди обычно ожидают. Однако x и y не таковы, как люди, более привычные к "левым"и " верхним". Таким образом, вы можете написать конвертер для преобразования левого процента в x и верхнего процента в y:

X = слева / (1-ширина)
y = верх / (1 - высота)

<AbsoluteLayout BackgroundColor="Yellow">
<BoxView
    Color="Red"
    AbsoluteLayout.LayoutBounds="1.0, 1.0, 0.5, 0.5"
    AbsoluteLayout.LayoutFlags="All" />

<BoxView
    Color="Green"
    WidthRequest="50"
    HeightRequest="50"
    AbsoluteLayout.LayoutBounds="0.1, 0.1, AutoSize, AutoSize"
    AbsoluteLayout.LayoutFlags="PositionProportional" />

<BoxView
    Color="Blue"
    AbsoluteLayout.LayoutBounds="0.25, 0.25, 0.5, 0.5"
    AbsoluteLayout.LayoutFlags="All" />
</AbsoluteLayout>

Введите описание изображения здесь

Когда я исследовал AbsoluteLayout, я создал этот образец и

Проверьте его, и вы увидите

Что я решил из моего расследования: X и Y - координаты верхнего левого угла View. Это относительное положение. Как вы можете видеть, для красного прямоугольника 1.0, 1.0 является центральным положением, поэтому, как я понимаю, 100% ширина экрана равна 2.0(то же самое для высоты). Все представления внутри AbsoluteLayout расположены в зависимости от значений родительского элемента AbsoluteLayout.

Отредактировано:

X и Y - это центральная координата View, а не левый верхний угол. И 100% Width - это 1.0.

X && Y являются центром элемента