问题描述
我正在使用Xamarin.Forms(XAML + C#)为带有内置激光条形码扫描仪的PDA制作仓库库存的Android应用。
工作人员将条形码和换行符一起扫描到名为ProductBarcode
的条目中,以触发该条目中的 Completed 事件,因此可以通过事件处理程序,带有这样的代码。
private void ProductBarcode_Completed(object sender,EventArgs e)
{
if (!Product.IsValidBarcode(ProductBarcode.Text))
displayAlert("Error","Invalid Product Barcode.","Okay");
else /* Use of ProductBarcode (irrelevant) */;
}
工作正常。但是问题在于,工作人员经常触摸屏幕(视图背景),并且Entry失去焦点。因此,当他们尝试扫描下一个代码时,通常会按下物理扫描按钮(例如在EDA50K或类似设备中),并且输入内容不会读入条目中,并且会丢失。
我想知道是否有可能(或没有)捕获发送到ContentPage
后台的输入并将其发送到正确的Entry。甚至可以从屏幕上的任何地方捕获输入。
解决方法
我在寻找对 android 和 ios 扫描条形码的表单支持时遇到了这个问题。我以前的应用程序是原生 xamarin android 应用程序,我用它来普遍捕获扫描的输入:
public override void HandleDispatchKeyEvent(KeyEvent e) {
if (!string.IsNullOrWhiteSpace(e.Characters)) {
HandleInput(e.Characters);
}
else if (e.Action == KeyEventActions.Up) {
if (e.KeyCode == Keycode.Enter) {
HandleInput(_barcodeChacacters);
_barcodeChacacters = "";
}
else {
_barcodeChacacters += e.DisplayLabel;
}
}
}
那是我添加到基本视图中的隐藏片段的内部代码。我知道 xamarin 形式的事件 droid 的命名略有不同,但我假设它的工作原理相同。我还没有尝试过,因为我需要一个适用于 Android 和 iOS 的解决方案。但由于您只是针对 android,如果您在这么长时间后仍然需要解决方案,希望能有所帮助。