Xamarin.Forms
Xamarin.Forms copied to clipboard
Soft keyboard does not appear for entry field on first page shown by app - Android only
Description
Soft keyboard does not appear for entry field on first page shown by app - Android only (there is no issue on iOS) Based on - https://bugzilla.xamarin.com/show_bug.cgi?id=51854
Steps to Reproduce
- Implement simplest app, that would contain Page with Entry, where during OnAppearing there will be invoked Focus() for this entry. I.e.:
using System;
using Xamarin.Forms;
namespace XamFormsSoftKeyboardIssue
{
class SamplePasscodePage : ContentPage
{
private readonly Entry _passcodeEntry;
public SamplePasscodePage(Action openAnotherPage)
{
_passcodeEntry = new Entry
{
Keyboard = Keyboard.Numeric,
IsPassword = true,
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Fill,
};
var button = new Button
{
Text = "Open Another Page",
Command = new Command(openAnotherPage)
};
Content = new StackLayout
{
Children =
{
_passcodeEntry,
button
}
};
}
protected override void OnAppearing()
{
base.OnAppearing();
_passcodeEntry.Focus();
}
protected override void OnDisappearing()
{
_passcodeEntry.Unfocus();
base.OnDisappearing();
}
}
public class App : Application
{
public App()
{
OpenPasscodePage();
}
private void OpenPasscodePage()
{
MainPage = new SamplePasscodePage(OpenAnotherPage);
}
private void OpenAnotherPage()
{
MainPage = new ContentPage
{
Content = new Button
{
Text = "Open Passcode Page Again",
Command = new Command(OpenPasscodePage),
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
}
};
}
}
}
Expected Behavior
After showing SamplePasscodePage, and invoking Focus() for Entry, keyboard should appeared.
Actual Behavior
After showing SamplePasscodePage, and invoking Focus() for Entry, keyboard sometimes appears, but sometimes does not appear.
Workaround
I've found out, that delaying invoking of Focus() (with at least 250ms, but it's just by trial and error...), affects 95-99% cases, when keyboard appears, as expected. I.e.:
protected override void OnAppearing()
{
base.OnAppearing();
Device.BeginInvokeOnMainThread(async () =>
{
await System.Threading.Tasks.Task.Delay(250);
_passcodeEntry.Focus();
});
}
Basic Information
- Version with issue: 2.5.1.317207-pre1, 2.5.0.122203, 2.4.0.269-pre2, 2.3.4, 2.3.4.184-pre1, 2.3.3.180
- Last known good version: none!
- IDE: Visual Studio for Mac, Visual Studio 2017 15.6.0
- Platform Target Frameworks:
- Android: 8.1
- Android Support Library Version: 27.0.2
- Nuget Packages: Xamarin.Forms.2.5.1.317207-pre1.nupkg
- Affected Devices: Meizu M2 Mini
Screenshots
Reproduction Link
I have what I assume is the same issue. It's not the first page in my app though, it's the first child page that's displayed in a fresh TabbedPage. All other child pages properly focus the entry when calling Focus() in their OnAppearing(), but it doesn't work in the first child page.
This is over a year old, is there a fix yet?
This issue doesn't seem to have had any activity in a long time. We're working on prioritizing issues and resolving them as quickly as we can. To help us get through the list, we would appreciate an update from you to let us know if this is still affecting you on the latest version of Xamarin.Forms, since it's possible that we may have resolved this as part of another related or duplicate issue. If we don't see any new activity on this issue in the next 30 days, we'll evaluate whether this issue should be closed. Thank you!
Still happens with Xamarin.Forms 4.5.0.356
This still doesnt work in 4.7. I'm using similar code with a search handler in forms shell. Calling Focus() in OnAppearing will focus the control but not open the soft keyboard.
Still doesn't work, it is a shame.
When will it get fixed?
When will this be fixed? There seems to always be something broken with Xamarin. You have no idea how many times that I have been reprimanded over these kinds of issues that are totally out of my hands.
I encountered the same issue with on 5.0. I had similar issues before with other control methods, liking scrolling to the end of a view. In both cases the workaround was to add some async delay in OnAppearing before setting focus (or scrolling). Here I required a delay of 200ms to consistently get the keyboard. Looks like there's some setup timing issues/races.
I encountered the same issue with on 5.0. I had similar issues before with other control methods, liking scrolling to the end of a view. In both cases the workaround was to add some async delay in
OnAppearingbefore setting focus (or scrolling). Here I required a delay of 200ms to consistently get the keyboard. Looks like there's some setup timing issues/races.
Worked for me. Thanks
protected override async void OnAppearing()
{
base.OnAppearing();
await Task.Delay(200);
fro_SearchBar.Focus();
}
This is not working for me. I am opening new page and I want to focus SearchBar with opened keyboard. Right now focus is set to SearchBar but keyboard is not shown.
EDIT: It works with entry even without delay. Issue is with SearchBar but this topic is not about it.