Xamarin Forms Android键盘向上移动整个页面

时间:2017-03-02 13:43:35

标签: c# android xaml xamarin xamarin.forms

我正在尝试编写一个Xamarin.Forms聊天应用。 问题是:在Android上,一旦键盘显示整个页面(包括ActionBar)向上移动。我可以通过使用调整页面大小的NuGet包来修复IOS上的问题。

我已经尝试在Android项目的MainActivity.cs中设置WindowSoftInputMode = Android.Views.SoftInput.AdjustResize,但它不起作用。 我还尝试通过重新计算屏幕大小来手动调整页面大小,但我还没有找到解决方案来获取键盘大小以便在不同设备上进行精确计算。

之前有没有人遇到过同样的问题? 是否有适用于所有受支持平台的官方Xamarin.Forms解决方案?

到目前为止,这是我的聊天布局:

<ContentPage.Content>
<StackLayout Padding="0">
  <ScrollView>
    <ListView HasUnevenRows="true" x:Name="lvChat" >
      <ListView.ItemTemplate>
        <DataTemplate>
          <ViewCell>
            <StackLayout Orientation="Vertical" VerticalOptions="Fill" HorizontalOptions="Fill" Padding="5">


              <Label Text="{Binding Author, StringFormat='{0}: '}" TextColor="Navy" FontSize="14"  />
              <Label Text="{Binding Text}" TextColor="Black" FontSize="15" />
              <Label Text="{Binding Time}" TextColor="Black" FontSize="14"  />
              <!-- Format for time.. , StringFormat='{0:HH:mm}' -->

            </StackLayout>
          </ViewCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>
  </ScrollView>


  <StackLayout Orientation="Horizontal" Padding="0" Margin="5, 5, 5, 5">
    <Entry Keyboard="Chat" x:Name="tbxChatInput" HorizontalOptions="FillAndExpand" Placeholder="Send a Message..." />
    <Button x:Name="btnSendMsg" HorizontalOptions="End" Text="Send" Margin="5"/>

  </StackLayout>
</StackLayout>

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试将包含输入和发送按钮的stacklayout放在滚动视图中,这样当您点击输入时它会向上推动键盘显示您的输入,其余的聊天在iOS和Android上都能正常工作。试试这个:

 <ContentPage.Content>
       <StackLayout Padding="0">
          <ScrollView>

           <StackLayout>

             <ListView HasUnevenRows="true" x:Name="lvChat" >
                <ListView.ItemTemplate>
                   <DataTemplate>
                      <ViewCell>
                        <StackLayout Orientation="Vertical" VerticalOptions="Fill" HorizontalOptions="Fill" Padding="5">


                        <Label Text="{Binding Author, StringFormat='{0}: '}" TextColor="Navy" FontSize="14"  />
                        <Label Text="{Binding Text}" TextColor="Black" FontSize="15" />
                        <Label Text="{Binding Time}" TextColor="Black" FontSize="14"  />
                  <!-- Format for time.. , StringFormat='{0:HH:mm}' -->

                </StackLayout>
              </ViewCell>
            </DataTemplate>
          </ListView.ItemTemplate>
        </ListView>

        <StackLayout Orientation="Horizontal" Padding="0" Margin="5, 5, 5, 5">
        <Entry Keyboard="Chat" x:Name="tbxChatInput" HorizontalOptions="FillAndExpand" Placeholder="Send a Message..." />
        <Button x:Name="btnSendMsg" HorizontalOptions="End" Text="Send" Margin="5"/>
       </StackLayout>

      </StackLayout>

      </ScrollView>
    </StackLayout>
    </ContentPage.Content>

答案 1 :(得分:0)

尝试在Android Manifest中设置windowSoftInputMode,例如:

<application ... >
    <activity
        android:windowSoftInputMode="adjustResize" ... >
        ...
    </activity>
    ...
</application>