XAML HorizontalStackLayout 양쪽 정렬 당연히 되야 하는거 아닌가요?

HorizontalStackLayout 내부에 하나는 Start, 다른 하나는 End 로 하면
당연히 양쪽으로 정렬되어야 하지 않나요??

            <Frame>
        <VerticalStackLayout>
          <HorizontalStackLayout BackgroundColor="BlueViolet" HorizontalOptions="Fill">
            <Label BackgroundColor="Aqua"
                   FontAttributes="Bold"
                   FontFamily="Bison"
                   FontSize="Title"
                   HorizontalOptions="Start"
                   Text="Result:" />
            <Label BackgroundColor="Gray"
                   FontAttributes="Bold"
                   FontFamily="Bison"
                   FontSize="Title"
                   HorizontalOptions="Fill"
                   HorizontalTextAlignment="End"
                   Text="{Binding ResultText}" />
          </HorizontalStackLayout>
          .....

제가 잘못알고 있는건가요??;;;

제목 없음

2개의 좋아요
  • MAUI 관련 질문으로 보여 적절하게 카테고리를 변경했습니다.
  • 질문 내용의 이미지가 정상 표시되지 않아 보이도록 수정하였습니다.
3개의 좋아요

두번째 Label의 size를 텍스트보다 크게 지정한 후 HorizontalTextAlignment 값이 Start, End일 때,
UI를 비교해보시는게 좋을 것 같네요

1개의 좋아요

질문자는 아마 보라색 배경을 그대로 유지한 상태로 NORMAL글자를 보라색 영역의 오른쪽 끝으로 옮기고자 하는 것으로 보입니다.

1개의 좋아요

네 그렇게 보입니다 ㅎㅎ
해당 코드에서 HorizontalTextAlignment는 Label 내부의 정렬을 설정합니다.
질문자는 HorizontalStackLayout의 정렬을 변경하고 싶은거 같은데,
Label의 정렬을 변경하니 의도대로 UI가 그려지지 않는 것으로 보이구요.
HorizontalOptions="Fill"으로 Text의 영역이 Label의 영역과 동일하기 때문에 Stat, End의 차이가 없어서 아무런 동작을 하지 않는 이상한 코드라고 생각 할 가능성이 높습니다.

양쪽으로 정렬하는 코드를 드리고 싶은데 현재 그럴 수 있는 상황이 아니라서;;
간단하게 답변을 드렸습니다.
솔루션을 주면 당장 이 문제에 대해 해결이 되지만,
의도대로 되지 않는 UI로 오는 고통, 답답함이 해결 되지는 않습니다.
분명히 맞게 한거 같은데 왜 이상하게 그려지지?, 뭐가 잘 못 된거야등의 의문점을 풀어드릴 의도 였습니다.

1개의 좋아요

image

// MAUI 코드입니다. 질문자와 다른 플랫폼으로 추측 됩니다.
<Frame>
    <VerticalStackLayout>
        <Grid 
            Background="BlueViolet"
            HorizontalOptions="Fill">
            <Label 
               Background="Aqua"
               FontAttributes="Bold"
               FontFamily="Bison"
               FontSize="Title"
               HorizontalOptions="Start"
               Text="Result:" />
            <Label 
               Background="Gray"
               FontAttributes="Bold"
               FontFamily="Bison"
               FontSize="Title"
               HorizontalOptions="End"
               Text="NORMAL"/>
        </Grid>
    </VerticalStackLayout>
</Frame>

Grid를 이용해서 할 수 있긴한데 좋은 방법은 아닙니다. ;; (Grid는 자식의 크기에 따라 Resize를 반복 할 수도 있기 때문에 App Performance측면을 고려해봐야 합니다.)
(다른 안좋은 방법으로는 Label사이에 Margin 또는 Space를 넣는 겁니다.)


일단 조사한 부분에 대해서 말씀드리겠습니다.
의도한대로 UI가 그려지지 않아서 많이 답답하실 것 같구요. 앞으로도 그럴수 있기 때문에
기본 배경지식이 필요하다고 생각합니다.

(위에 문서를 추천 드립니다.)
(질문자의 의도를 구현 할 수 있게 설계된 UI를 선택하는 것이 좋습니다. 의도에 맞지 않은 UI를 억지로 끼워 맞추면 다른 문제가 생길 가능성이 큽니다.)

사진안의 크고 작은 네모난 박스를 보면 질문자가 원하는 것을 제공해주는 것은 Grid, FlexLayout정도가 될 것 같구요, 어떻게 꼬아서 잘하면 ReleativeLayout로 가능 할 것 같습니다.

Grid의 경우 자식요소의 크기 변경 및 추가가 되는 구조라면 다른 방식을 고려 해보아야하구요.
자유롭고 의도대로 표현 및 기기에 영향 받지 않는 UI를 구성하고 싶다면 FlexLayout을 추천 드립니다.


// Can`t build with this code
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="StackLayoutDemos.Views.AlignmentPage"
             Title="Alignment demo">
    <StackLayout Margin="20">
        <Label1 Text="Start"
               BackgroundColor="Gray"
               HorizontalOptions="Start" >
               <ChildLayout HorizontalOptions="End" />
        </Label1>
        <Label2 Text="Center"
               BackgroundColor="Gray"
               HorizontalOptions="Center" />
        <Label3 Text="End"
               BackgroundColor="Gray"
               HorizontalOptions="End" />
        <Label Text="Fill"
               BackgroundColor="Gray"
               HorizontalOptions="Fill" />
    </StackLayout>
</ContentPage>

UI의 부모와 자식을 잘 고려야합니다. 자식은 부모를 상속 받기 때문에 정렬 또한 상속 받을 수 있습니다.
Label1의 ChildLayout 을 End로 정렬을 해도, 부모가 Start로 정렬 되어 있기 때문에 Child의 정렬 설정이 퇴색됩니다…

글로 설명하는게 어렵네요 ㅎㅎ;;

6개의 좋아요

고맙습니다~ 아직 퍼포먼스 따지고 그럴 단계가 아니라서;;;

UI 가 코드보다 더 어려운거 같습니다. 헉헉

<Frame>
  <VerticalStackLayout>
    <Grid ColumnDefinitions="*,*">
      <Label FontAttributes="Bold"
              FontFamily="Bison"
              FontSize="Title"
              Text="Result:" />
      <Label Grid.Column="1"
              FontAttributes="Bold"
              FontFamily="Bison"
              FontSize="Title"
              HorizontalTextAlignment="End"
              Text="{Binding ResultText}" />
    </Grid>
  </VerticalStackLayout>
</Frame>

image

3개의 좋아요

:+1:
배경색은 Background를 BackgroundColor로 변경해주시면 될 것 같아요

<Grid 
    BackgroundColor="BlueViolet"
    HorizontalOptions="Fill">
    <Label 
       BackgroundColor="Aqua"
       FontAttributes="Bold"
       FontFamily="Bison"
       FontSize="Title"
       HorizontalOptions="Start"
       Text="Result:" />
    <Label 
       BackgroundColor="Gray"
       FontAttributes="Bold"
       FontFamily="Bison"
       FontSize="Title"
       HorizontalOptions="End"
       Text="NORMAL"/>
</Grid>

UI는 말씀드린것 과 같이 의도와 알맞는 UI를 찾다보면 도움이 많이 되실 것 같아요.
퍼포먼스나 여러 문제점 등은 나중에 문제점이 있을 때 고려해보시는 것도 괜찮습니다.
App Performance, Best Practice 등으로 검색하면 관련된 포스팅, 문서를 찾으실 수 있을 겁니다.

1개의 좋아요