1
votes

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

I have a page which has a listview which contains an input entry and a label. My problem is that in Android, on tapping the first or second entry, the Keyboard appears. I want it to scroll the page down to select the last entry, but i cannot see (or focus) the last entry, because it's overlapped by soft keyboard. I cannot scroll to the last entry when the soft keyboard are enabled/visible, because the soft keyboard hides the last entr(ies). I can scroll to the last entry when I hide/disable the soft keyboard, but I do not want this!

I searched on the internet and tried a lot but nothing works.

Solutions that didn't work: 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

Maybe someone here has a working solution/workaround for this bug?

3

3 Answers

8
votes

This is a well known issue which occurs due to a bug on Xamarin Forms.

Setting the WindowSoftInputMode attribute to the activity itself doesn't work exactly because of the bug so you must explicitly set this attribute by adding this line of code below the

LoadApplication(new App());

call :

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

Try open the MainActivity in your droid project and add "WindowSoftInputMode = SoftInput.AdjustResize," like this:

[Activity(
    Label = "Sample",
    Icon = "@drawable/icon",
    Theme = "@style/MyTheme",
    MainLauncher = true,
    WindowSoftInputMode = SoftInput.AdjustResize,
    ScreenOrientation = ScreenOrientation.Portrait,
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity....
    {
        ...
    }
0
votes

I see this is an old thread but i can also think that you have the listview inside a scrollview. That use to be trouble. Try using the listview header and put the buttons there instead.