RelativeLayout не позиционирует вид по центру по горизонтали при установке X Factor .5 - PullRequest
1 голос
/ 06 марта 2019

Я работаю над RelativeLayout, у меня три BoxView.boxview3 Я хочу получить после boxview2, используя Type=RelativeToView.

boxview3 XConstraint Я устанавливаю .5 все еще boxview3, отображаемое слева вверху, почему?Как я могу получить boxview3 сразу после boxview2?

<RelativeLayout>
<BoxView x:Name="boxview1" BackgroundColor="#b87333"                 
         RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,
         Property=Width,Factor=.5 }"                
         RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,
         Property=Height, Factor=1}">
</BoxView>

<BoxView BackgroundColor="Red" x:Name="boxview2"                
         RelativeLayout.HeightConstraint="{ConstraintExpression ElementName=boxview1,
         Type=RelativeToView,Property=Height,Factor=.1}" 
         RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
         ElementName=boxview1,Factor=1,Property=Width}"
         RelativeLayout.WidthConstraint="{ConstraintExpression   
         Type=RelativeToParent,Property=Width, Factor=0.1,Constant=-10}"
         RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView,
         ElementName=boxview1,Property=Height,Factor=.4}">
</BoxView>

<BoxView BackgroundColor="Blue" x:Name="boxview3"
        RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
        ElementName=boxview2, Property=Width,Factor=.5}">
</BoxView>

</RelativeLayout> 

Примечание: если дать XConstraint как .5, я ожидаю view в середине экрана, будь то по горизонтали.

Снимок экрана:

enter image description here

1 Ответ

1 голос
/ 06 марта 2019

Короткий ответ: вы не можете указать ограничение X, которое вы ищете в Xaml, вам придется использовать C #.Все элементы в RelativeLayout расположены относительно всего RelativeLayout.

Xaml, который вы сейчас имеете, указывает, что ширина boxview2 равна 0,1 * RelativeLayout.Width - 10, а координата X boxview3 равна половине этого значения, поэтомубудет позиционироваться в 0,05 * RelativeLayout.width - 5 слева вверху, и это то, что вы видите.

Для ограничений RelativeLayout в Xaml вы можете использовать ровно 1 из X или Y верхнейслева от вида или его ширины или высоты.Чтобы добиться того, что вы хотите, вам нужен верхний правый угол boxview2 (или boxview2.X + boxview2.Width).Вам придется создать boxview3 в коде C #, например:

reelativeLayout.Children.Add (boxview3, Constraint.RelativeToView (boxview2, (parent, view) => {
        return view.X + view.Width;
    }),
    …   // other constraints
    ));

В зависимости от ваших потребностей, вы можете найти другой контейнер, с которым легче работать.

...