Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tela no Xamarin não se adapta ao celular

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?

4 respostas

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>
solução!

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