2017-02-15 11 views
1

私はxamarin.formsの1つの問題に直面しています。 GridViewを使用してログインページの設計を行っていますので、デバイスの高さと幅を変更することができます。私はそのページをスクロールしたくないので、私はScrollViewを置かなかった。グリッドレイアウトでは、キーボードがxamarin.formsで開いているときにページをスクロールする方法は?

XAMLデザインコード: -

<?xml version="1.0" encoding="utf-8" ?> 
<custom:KeyboardResizingAwareContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="HRMS.Login.LoginPage" 
      BackgroundImage="login_bg.png" 
        xmlns:local="clr-namespace:HRMS;assembly=HRMS" 
        Title="{x:Static local:AppResources.TitleLogin}" 
      xmlns:custom="clr-namespace:HRMS.Login;assembly=HRMS"> 
    <ContentPage.Padding> 
    <OnIdiom x:TypeArguments="Thickness" Phone="60,40,60,40" Tablet="120,100,120,100" /> 
    </ContentPage.Padding> 
    <custom:KeyboardResizingAwareContentPage.Resources> 
    <ResourceDictionary> 
     <Style x:Key="SubTitleStyle" TargetType="Label"> 
     <Setter Property="FontSize" Value="Small" /> 
     <Setter Property="FontAttributes" Value="Bold" /> 
     <Setter Property="TextColor" Value="White" /> 
     </Style> 
    </ResourceDictionary> 
    </custom:KeyboardResizingAwareContentPage.Resources> 
    <custom:KeyboardResizingAwareContentPage.Content> 
    <AbsoluteLayout x:Name="AbsMain"> 
     <Grid VerticalOptions="Center" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="35*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="6*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="6*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Image x:Name="ImgLogo" Source="login_logo.png" HorizontalOptions="Center" Grid.Row="0"/> 
     <StackLayout Grid.Row="1"> 
      <StackLayout.HeightRequest> 
      <OnIdiom x:TypeArguments="x:Double" Tablet="55" Phone="35" /> 
      </StackLayout.HeightRequest> 
     </StackLayout> 
     <Frame OutlineColor="#DCDCDC" 
      HorizontalOptions="FillAndExpand" VerticalOptions="Center" 
      HasShadow="false" Padding="1" 
      Grid.Row="2" 
      BackgroundColor="White" 
      Margin="5,0,5,0"> 
      <Frame.HeightRequest> 
      <OnIdiom x:TypeArguments="x:Double" Tablet="55" Phone="35" /> 
      </Frame.HeightRequest> 
      <Frame.Content> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="1*"/> 
       <ColumnDefinition Width="9*"/> 
       </Grid.ColumnDefinitions> 
       <Image x:Name="ImgLoginName" Grid.Column="0" Source="ico_login_name.png" 
        HorizontalOptions="StartAndExpand" VerticalOptions="Center" Margin="5,0,0,0"/> 
       <StackLayout Grid.Column="1" VerticalOptions="Center"> 
       <Entry x:Name="TxtUsername" TextColor="#f15a23" 
         Margin="5,0,0,0" 
         PlaceholderColor="#8c8c8c" 
         BackgroundColor="White" 
         Placeholder="{x:Static local:AppResources.PHEmployeeCode}" /> 
       </StackLayout> 
      </Grid> 
      </Frame.Content> 
     </Frame> 
     <Frame OutlineColor="#DCDCDC" 
      HorizontalOptions="FillAndExpand" VerticalOptions="Center" 
      HasShadow="false" Padding="1" 
      Grid.Row="3" 
      BackgroundColor="White" 
      Margin="5,0,5,0"> 
      <Frame.HeightRequest> 
      <OnIdiom x:TypeArguments="x:Double" Tablet="55" Phone="35" /> 
      </Frame.HeightRequest> 
      <Frame.Content> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="1*"/> 
       <ColumnDefinition Width="9*"/> 
       </Grid.ColumnDefinitions> 
       <Image x:Name="ImgLoginPassword" Grid.Column="0" Source="ico_login_password.png" 
        HorizontalOptions="StartAndExpand" VerticalOptions="Center" Margin="5,0,0,0"/> 
       <StackLayout Grid.Column="1" VerticalOptions="Center"> 
       <Entry x:Name="TxtPassword" IsPassword="True" TextColor="#f15a23" 
        PlaceholderColor="#8c8c8c" 
        Margin="5,0,0,0" 
        BackgroundColor="White" 
        Placeholder="{x:Static local:AppResources.PHPassword}" /> 
       </StackLayout> 
      </Grid> 
      </Frame.Content> 
     </Frame> 
     <Label x:Name="LblForgotPassword" Grid.Row="4" Margin="5,0,5,0" 
        Text="Forgot Password?" TextColor="Black" HorizontalTextAlignment="End"/> 
     <Button x:Name="BtnLogin" Text="{x:Static local:AppResources.BLogin}" Clicked="LoginButton_Clicked" 
        Grid.Row="5" BackgroundColor="#f15a23" TextColor="White" 
        HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
      <Button.HeightRequest> 
      <OnIdiom x:TypeArguments="x:Double" Tablet="55" Phone="45" /> 
      </Button.HeightRequest> 
     </Button> 
     <Image x:Name="ImgOr" Grid.Row="6" HorizontalOptions="FillAndExpand" 
       Source="or.png" /> 
     <Button x:Name="BtnUpdateDevicewithlogin" Text="{x:Static local:AppResources.BUpdateDevice}" 
       Clicked="UpdateDeviceWithLoginButton_Clicked" Grid.Row="7" 
       BackgroundColor="#f15a23" TextColor="White" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
      <Button.HeightRequest> 
      <OnIdiom x:TypeArguments="x:Double" Tablet="55" Phone="45" /> 
      </Button.HeightRequest> 
     </Button> 
     </Grid> 
     <ActivityIndicator x:Name="actIndicator2" Color="#f15a23" Opacity="2" 
       HeightRequest="50" WidthRequest="50" VerticalOptions="Center" HorizontalOptions="Center" 
       AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" /> 

    </AbsoluteLayout> 

    </custom:KeyboardResizingAwareContentPage.Content> 
</custom:KeyboardResizingAwareContentPage> 

enter image description here

enter image description here

キーボードが開いているときには、IOSページが設定されていないので、私は "KeyboardResizingAwareContentPage" ページの代わりに "ContentPage" を使用しています。パスワードフィールドはキーボードの背後に隠れているので、ユーザーは入力したものを見ることができません。そのため、I/OのコンテンツページにRenderを使用しています。

私がユーザー名またはパスワード入力フィールドに焦点を当てると、2つのボタンはキーボードの後ろに隠れています。クライアントの要件は、その時点でページをスクロールする必要があることです。どうすればこの問題を解決できますか?レンダリングが可能ですか?私は両方のプラットフォームでこの問題に直面しています。 (ios and android)

+0

これをチェック:http://stackoverflow.com/questions/31172518/how-do-i-keep-the-keyboard-from-covering-my-ui-instead-of-resizing-it – Zroq

+0

グリッドを内側に配置するContentPageのScrollView –

+0

あなたは解決策を手に入れましたか? –

答えて

1

ページをスクロールするつもりでない場合でも、ページのルートとしてScrollViewを使用し、グリッドを配置します。

これで解決します。

+0

これは機能しません。 (ページのデザインはデバイスの高さに合わせて設定する必要があるため、グリッドを使用しています。ページはスクロールしませんが、クライアントの要件はキーボードが開いているときにスクロールする必要があります)。私は "*"と自動フォーマットで各行に高さを与えています。私のグリッドをスクロールビューの中に置くと、グリッドがどれくらいの高さをとらなければならないのか分かりません。だから私のデザインは不適切です。 –

関連する問題