Xamarin Forms中Entry获焦后切换布局,DispatchKeyEvent不再触发
Xamarin Forms Android 硬件键盘事件失效问题
开发背景
为Zebra扫描器开发Android平台的Xamarin Forms移动应用,通过切换StackLayout1和StackLayout2的IsVisible属性展示不同UI内容。用户仅通过扫描器硬件键盘操作,已禁用虚拟键盘。
核心问题
在Android项目的PageRenderer中重写了DispatchKeyEvent,整体运行正常,但存在以下异常场景:
- 显示
StackLayout1 - 用户点击Entry控件使其获焦
- 用户点击UI按钮,应用切换显示
StackLayout2 - 此时按下设备任意按键,
DispatchKeyEvent均不再触发
额外测试情况
- 若未让Entry获焦,切换到
StackLayout2后DispatchKeyEvent正常触发 - 若通过代码让
StackLayout2的Entry获焦,DispatchKeyEvent也正常,但这并非可行方案 - 尝试让
StackLayout2获焦,代码执行正常但IsFocused始终为false,DispatchKeyEvent仍不触发
更新记录
更新1
为两个StackLayout添加ViewRenderer,StackLayout2显示时会触发OnElementChanged事件,但问题仍存在,焦点相关代码中IsFocused始终为false。相关代码如下:
async void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case "IsVisible": if (Element.IsVisible) { if (sender is StackLayout) { this.FocusableViewAvailable(this); // 注释这两行结果相同 this.Focusable = true; // 注释这两行结果相同 this.FocusableInTouchMode = true; var dd = this.RequestFocus(); // 始终返回false var ee = this.IsFocused; // 始终为false } } break; } }
更新2
无需自定义StackLayout,解决方案不包含更新1内容。
寻求解决思路
内容的提问来源于stack exchange,提问作者pdschuller
相关产品推荐
相关产品推荐

