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
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
}
};
}
}
}
After showing SamplePasscodePage, and invoking Focus() for Entry, keyboard should appeared.
After showing SamplePasscodePage, and invoking Focus() for Entry, keyboard sometimes appears, but sometimes does not appear.
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();
});
}
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?
Most helpful comment
This is over a year old, is there a fix yet?