2017-01-04 3 views
1

В моем приложении Xamarin Forms я пытаюсь разместить две метки на моем мобильном интерфейсе: один в нижнем левом углу, один в правом нижнем углу ,Xamarin layout Как разместить ярлык в левом нижнем углу и в правом нижнем углу экрана

Вот моя текущая попытка. Это макет сетки с одной строки и две колонки, с этикеткой в ​​каждой ячейке, слева один с HorizontalTextAlightment="Start", а правая с HorizontalTextAlightment="End"

...other unrelated controls... 
    <StackLayout Orientation="Horizontal" Spacing="0" Padding="15" VerticalOptions="End" > 
     <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Label Text="{Binding DeviceId}" HorizontalTextAlignment="Start" Grid.Row="0" Grid.Column="0" /> 
     <Label Text="{Binding Version}" HorizontalTextAlignment="End" Grid.Row="0" Grid.Column="1" /> 
     </Grid> 


    </StackLayout> 

    </StackLayout> 

Это производит этот нежелательный результат: (v1.0-1 следует выровнять вправо)

current

Это то, что я хочу:

enter image description here

+0

Попробуйте использовать HorizontalOptions в StartAndExpand для первой этикетки и EndAndExpand на второй этикетке, а не HorizontalTextAlignment – Mounika

ответ

2

Почему вы обертывание вид в StackLayout? A Stacklayout выделяет минимальное требуемое пространство. Вот почему вы видите поведение, которое вы проявили в Screenshot 1.

Если вы просто:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Label Text="{Binding DeviceId}" HorizontalTextAlignment="Start" Grid.Row="0" Grid.Column="0" /> 
    <Label Text="{Binding Version}" HorizontalTextAlignment="End" Grid.Row="0" Grid.Column="1" /> 
    </Grid> 

Вы увидите желаемое поведение.

Вы также можете попробовать использовать HorizontalOptions на Label вместо HorizontalTextAlignment


Если вам действительно нужно использовать StackLayout можно попробовать установив HorizontalOptions из StackLayout в FillAndExpand. в котором говорится:

FillAndExpand - ставит точку зрения, так что он не имеет отступов и занимает столько мест, сколько расположение даст его.

исх:https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/stack-layout/#Sizing

0

Использование «*» для ширины только делает столбец как большой, как это должно быть для того, чтобы соответствовать его содержанию. Вместо этого попробуйте сделать каждый столбец 50% общей ширины.

 <ColumnDefinition Width="50*" /> 
     <ColumnDefinition Width="50*" /> 
+0

Я думал, что ' "# *"' был интерпретирован только как отношение по сравнению с другими строками (или столбцами) –

2

Попробуйте

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <Label Text="{Binding DeviceId}" HorizontalTextAlignment="Start" Grid.Row="1" Grid.Column="0" /> 
    <Label Text="{Binding Version}" HorizontalTextAlignment="End" Grid.Row="1" Grid.Column="2" /> 
</Grid> 
Смежные вопросы