如何在Xamarin.Forms中编程模拟触发Enter/Return回车键
Xamarin.Forms Android 平台触发Entry回车键按下的实现方案
针对你的需求,有两种可行实现方式:
方案1:直接触发Completed对应逻辑(无平台依赖,推荐优先使用)
如果你的回车键原本绑定的是Completed事件的处理逻辑,不需要真的模拟系统按键事件,直接调用对应处理方法即可,实现成本最低:
- 先将Entry的
Completed事件处理逻辑抽为独立方法
private void OnEntryCompleted(object sender, EventArgs e) { var inputText = ((Entry)sender).Text; // 原有回车键处理逻辑,比如提交条码数据 ProcessBarcode(inputText); } private void ProcessBarcode(string barcode) { // 实际业务逻辑代码 }
- 扫码成功给Entry赋值后直接调用处理方法即可
// 扫码返回结果后的执行逻辑 barcodeEntry.Text = scanResult; barcodeEntry.Focus(); // 直接触发完成逻辑,无需模拟按键 ProcessBarcode(barcodeEntry.Text); // 也可选择直接触发Completed事件: // OnEntryCompleted(barcodeEntry, EventArgs.Empty);
方案2:安卓平台特定实现,真实模拟回车键按下
如果确实需要触发系统级的回车键按键事件,可以通过依赖服务调用安卓原生API实现:
- 首先在共享项目中定义依赖服务接口
public interface IKeyEventSimulator { void SimulateEnterKey(Entry entry); }
- 在安卓项目中实现该接口
[assembly: Dependency(typeof(KeyEventSimulatorAndroid))] namespace YourAppName.Droid { public class KeyEventSimulatorAndroid : IKeyEventSimulator { public void SimulateEnterKey(Entry entry) { var renderer = Platform.GetRenderer(entry); if (renderer?.View is Android.Widget.EditText editText) { // 构造按下、抬起两个阶段的回车键事件 var downEvent = new KeyEvent(KeyEventActions.Down, Keycode.Enter); var upEvent = new KeyEvent(KeyEventActions.Up, Keycode.Enter); editText.DispatchKeyEvent(downEvent); editText.DispatchKeyEvent(upEvent); } } } }
- 共享项目中扫码完成后调用即可
barcodeEntry.Text = scanResult; barcodeEntry.Focus(); DependencyService.Get<IKeyEventSimulator>().SimulateEnterKey(barcodeEntry);
注意:替换代码中的
YourAppName为你实际的项目命名空间。
内容的提问来源于stack exchange,提问作者Shibit
相关产品推荐
相关产品推荐

