No meu app possuo uma página que 5 linhas e em cada linha uma imagem e um botão. Quando mudo de celular a distribuição das linhas não ocupa toda a tela. Existe uma forma, no Xamarin, de ajustar no tamanho da tela do celular?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
No meu app possuo uma página que 5 linhas e em cada linha uma imagem e um botão. Quando mudo de celular a distribuição das linhas não ocupa toda a tela. Existe uma forma, no Xamarin, de ajustar no tamanho da tela do celular?
Deduzo que o projeto seja feito em Xamarin Forms e pela pouca descrição, acredito que estejas usando o componente de Grid. Nesse caso as larguras e alturas das células precisam ser ajustadas de uma forma dinâmica e não com um valor fixo.
Um exemplo:
<Grid RowSpacing="0" ColumnSpacing="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid>
Acho que seria algo nessa linha. Eu não testei esse trecho de código. Pode ser que alguma propriedade esteja com nome errado, mas a ideia é essa. A documentação da Xamarin sobre grid é bem completa: https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/grid/
:)
Não estou usando o Grid, estou utilizando o StackLayout. Segue código:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Moshi.Telas.TelaMenuImovel">
<ContentPage.Content>
<StackLayout Orientation="Vertical" Margin="20">
<StackLayout Orientation="Horizontal">
<Image Source="camera.png" WidthRequest="30" ></Image>
<Button Text="Vendedor" WidthRequest="200" HeightRequest="50" ></Button>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Image Source="camera.png" WidthRequest="30"></Image>
<Button Text="Comprador" WidthRequest="200" HeightRequest="50"></Button>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Image Source="camera.png" WidthRequest="30"></Image>
<Button Text="Grupo" WidthRequest="200" HeightRequest="50"></Button>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Image Source="documento.png" WidthRequest="30"></Image>
<Button Text="Dados Imóvel" WidthRequest="200" HeightRequest="50"
Clicked="btDadosImovel"></Button>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Image Source="gps.png" WidthRequest="30"></Image>
<Button Text="Localização" WidthRequest="200" HeightRequest="50"
Clicked="btGps"></Button>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
Edgar, Stacklayout não é muito recomendado para fazer esse tipo de tela. Recomendo muito você usar o Grid. Um exemplo seria isso:
<Grid RowSpacing="0" ColumnSpacing="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="50" />
<RowDefinition Height="50" />
<RowDefinition Height="50" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<Image Source="camera.png" Grid.Col="0" Grid.Row="0" />
<Button Text="Vendedor" Grid.Col="1" Grid.Row="0" />
<Image Source="camera.png" Grid.Col="0" Grid.Row="1" />
<Button Text="Comprador" Grid.Col="1" Grid.Row="1" />
<Image Source="camera.png" Grid.Col="0" Grid.Row="2" />
<Button Text="Grupo" Grid.Col="1" Grid.Row="2" />
<Image Source="documento.png" Grid.Col="0" Grid.Row="3" />
<Button Text="Dados Imóvel" Grid.Col="1" Grid.Row="3" Clicked="btDadosImovel" />
<Image Source="gps.png" Grid.Col="0" Grid.Row="3" />
<Button Text="Localização" Grid.Col="1" Grid.Row="3" Clicked="btGps" />
<Grid>
Eu não testei esse código, mas a ideia é essa :)
Tente ai e me diz se deu certo!
angelo, blz, deu certo sim.
obrigado