Xamarin.Forms:软键盘与页面底部的最后一个条目(滚动时)重叠

时间:2017-11-28 11:38:08

标签: listview xamarin.forms android-softkeyboard

[Xamarin.Forms 2.5.0.91635] [Android 5,6,7,8]

我有一个页面,其中包含一个包含输入条目和标签的列表视图。我的问题是在Android中,点击第一个或第二个条目时,会出现键盘。我希望它向下滚动页面以选择最后一个条目,但我无法看到(或聚焦)最后一个条目,因为它与软键盘重叠。当软键盘启用/可见时,我无法滚动到最后一个条目,因为软键盘隐藏了最后一个键盘。 当我隐藏/禁用软键盘时,我可以滚动到最后一个条目,但我不想要这个!

我在互联网上搜索并尝试了很多,但没有任何作用。

无效的解决方案: https://gist.github.com/jimmgarrido/e36033b26f01e8da091fd321d41d991a xamarinformscorner.blogspot.nl/2016/06/soft-keyboard-hiding-entries-fields-in.html https://forums.xamarin.com/discussion/62668/appcompat-does-not-resize-screen-with-keyboard

<ContentPage.Content>
        <ScrollView>
                <StackLayout x:Name="StackLayoutButtons" HorizontalOptions="Center" Orientation="Horizontal">
                    <Button x:Name="PreviousButton" WidthRequest="35" FontSize="23" FontAttributes="Bold" Clicked="PreviousButton_OnClicked"></Button>
                    <Button x:Name="DatePickerButton" FontSize="20" Clicked="DatePickerButton_OnClicked"></Button>
                    <DatePicker x:Name="DatePicker" Format="dddd d MMMM yyyy" VerticalOptions="Center" HorizontalOptions="FillAndExpand" IsVisible="False" IsEnabled="False"/>
                    <Button x:Name="NextButton" WidthRequest="35" FontSize="23" FontAttributes="Bold" Clicked="NextButton_OnClicked"></Button>
                    <Button x:Name="LastButton" WidthRequest="50" FontSize="23" FontAttributes="Bold" Clicked="LastButton_OnClicked"></Button>
                </StackLayout>

                <ListView x:Name="ListViewItemPage" ItemTapped="ListView_OnItemTapped">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <RelativeLayout x:Name="RelativeLayout" >
                                    <Label x:Name="DescriptionLabel" Text="{Binding Description}"  RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Y, Factor=0, Constant=15}" RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=X, Factor=0, Constant=15}" />
                                    <Entry x:Name="Entry" WidthRequest="85" Keyboard="Text" HorizontalTextAlignment="Start" FontSize="19" HorizontalOptions="Center" VerticalOptions="Center" Text="{Binding Value, Mode=TwoWay, Converter={StaticResource FloatValueConverter}}" Unfocused="ValueEntry_OnUnfocused"
                                           RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Y, Factor=0, Constant=10}" RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1, Constant={StaticResource ConstantMultiPlatform}}" >
                                        <Entry.HeightRequest>
                                            <OnPlatform x:TypeArguments="x:Double">
                                                <On Platform="iOS" Value="28"></On>
                                                <On Platform="Android" Value="42"></On>
                                                <On Platform="UWP" Value="32"></On>
                                            </OnPlatform>
                                        </Entry.HeightRequest>
                                    </Entry>
                                </RelativeLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>
        </ScrollView>
    </ContentPage.Content>

Normal view (last entry) When first entry focused and scrolled all the way down

也许这里的某个人有这个错误的工作解决方案/解决方法?

3 个答案:

答案 0 :(得分:5)

这是一个众所周知的问题,是由于Xamarin Forms上的错误引起的。

由于存在错误,将WindowSoftInputMode属性设置为活动本身并不能完全起作用,因此您必须通过在

下添加以下代码行来显式设置此属性。
  

LoadApplication(new App());

致电:

Xamarin.Forms.Application.Current.On<Xamarin.Forms.PlatformConfiguration.Android>().UseWindowSoftInputModeAdjust(WindowSoftInputModeAdjust.Resize);

答案 1 :(得分:0)

尝试在droid项目中打开MainActivity并添加&#34; WindowSoftInputMode = SoftInput.AdjustResize,&#34;像这样:

iOS

答案 2 :(得分:0)

我看到这是一个旧线程,但我也可以认为您在滚动视图中具有列表视图。过去很麻烦。尝试使用listview标头,然后将按钮放在那里。