处理DispatchKeyEvent在Xamarin Forms Android平台上,当没有控件有焦点



我有一个Xamarin Forms项目。. NET标准2.1)和我需要处理DispatchKeyEvent在Android平台。如果条目控件有焦点,我可以让它工作得很好,但我需要它在没有控件有焦点时工作。

基于这篇相关的文章,我试图给从PageRenderer继承的页面的焦点。(我意识到那篇文章不是关于Xamarin Forms项目的。)

所以我在Android项目的PageRenderer中添加了以下内容:

// in the PageRenderer class
protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{           return;       }
try
{
this.Focusable = true;
this.FocusableInTouchMode = true;
bool f = IsFocused;  // this is false here
} 
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(@"ERROR: ", ex.Message);
}
}

但是IsFocused总是假的。

注意:设备(条形码扫描器)有一个硬件键盘,这就是我在这种情况下使用的。

我怎么能让代码击中DispatchKeyEvent处理程序时,没有控制有焦点?

基于@ToolmakerSteve的指导,我将this.RequestFocus()添加到OnElementChanged块中,现在即使页面上没有Entry控件,我的DispatchKeyEvent事件处理程序也会被击中。

this.Focusable = true;
this.FocusableInTouchMode = true;
this.RequestFocus();
bool f = IsFocused;  // now this is true because of RequestFocus()

最新更新