如何在 Xamarin.Forms 中以编程方式模拟或触发 Enter 或 Return 键
How to Simulate or Trigger Enter or Return key programmatically in Xamarin.Forms
我有一个扫描条形码的相机扫描仪应用程序,结果返回到 Entry
字段。
我可以聚焦那个 Entry
字段,但我无法让它以编程方式按回车键,有没有办法在 Xamarin.Forms 中做到这一点?
我的目标平台是 Android。
Enter 或 Return 键按下将触发 Completed
事件。我使用按钮将焦点设置到条目,然后在 Focused 事件中模拟 Enter press。
private void Button_Clicked(object sender, EventArgs e)
{
entry.Focus();
}
private void entry_Focused(object sender, FocusEventArgs e)
{
entry_Completed(sender, e);
}
private void entry_Completed(object sender, EventArgs e)
{
entry.Text = "Hello";
entry.Unfocus();
}
这是问题的一个小复制,相当简单。
在XAML中:
<Entry Name="entry" Completed="OnCompleted"/>
<Label Name="label"/>
<Button Text="PRESS ENTER" Clicked="OnButtonPressed"/>
在 C# 或代码后面我有:
void OnCompleted(object sender, EventArgs e)
{
label.Text = entry.Text;
}
void OnButtonPressed (object sender, EventArgs e)
{
// we will be adding this code here at the last step
}
然后创建一个 Interface
,因为唯一简单的方法是通过 DependencyService
:
使用本机 android 功能
public Interface IEnterService
{
void PressEnter();
}
然后在Android项目中你需要创建一个class例如:EnterService
并像这样实现之前创建的接口:
[assembly: Xamarin.Forms.Dependency(typeof(EnterService))]
namespace TestEnterPressed.Droid
{
[Register("sendKeyDownUpSync", "(I)V", "GetSendKeyDownUpSync_IHandler")]
class EnterService : IEnterService
{
public void PressEnter()
{
Console.WriteLine("ENTER IS PRESSED");
Instrumentation inst = new Instrumentation();
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
/* run your code here */
inst.SendKeyDownUpSync(Keycode.Enter);
}).Start();
}
}
}
然后在最后一步中使用您的 DependencyService
模拟通过键盘以外的按钮按下 Enter 或在使用相机扫描条形码后,您可以这样做:
void OnButtonPressed(object sender, EventArgs e)
{
entry.Focus();
DependencyService.Get<IEnterService>().PressEnter();
}
我希望这对某些人有用,非常感谢大家:)
我有一个扫描条形码的相机扫描仪应用程序,结果返回到 Entry
字段。
我可以聚焦那个 Entry
字段,但我无法让它以编程方式按回车键,有没有办法在 Xamarin.Forms 中做到这一点?
我的目标平台是 Android。
Enter 或 Return 键按下将触发 Completed
事件。我使用按钮将焦点设置到条目,然后在 Focused 事件中模拟 Enter press。
private void Button_Clicked(object sender, EventArgs e)
{
entry.Focus();
}
private void entry_Focused(object sender, FocusEventArgs e)
{
entry_Completed(sender, e);
}
private void entry_Completed(object sender, EventArgs e)
{
entry.Text = "Hello";
entry.Unfocus();
}
这是问题的一个小复制,相当简单。
在XAML中:
<Entry Name="entry" Completed="OnCompleted"/>
<Label Name="label"/>
<Button Text="PRESS ENTER" Clicked="OnButtonPressed"/>
在 C# 或代码后面我有:
void OnCompleted(object sender, EventArgs e)
{
label.Text = entry.Text;
}
void OnButtonPressed (object sender, EventArgs e)
{
// we will be adding this code here at the last step
}
然后创建一个 Interface
,因为唯一简单的方法是通过 DependencyService
:
public Interface IEnterService
{
void PressEnter();
}
然后在Android项目中你需要创建一个class例如:EnterService
并像这样实现之前创建的接口:
[assembly: Xamarin.Forms.Dependency(typeof(EnterService))]
namespace TestEnterPressed.Droid
{
[Register("sendKeyDownUpSync", "(I)V", "GetSendKeyDownUpSync_IHandler")]
class EnterService : IEnterService
{
public void PressEnter()
{
Console.WriteLine("ENTER IS PRESSED");
Instrumentation inst = new Instrumentation();
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
/* run your code here */
inst.SendKeyDownUpSync(Keycode.Enter);
}).Start();
}
}
}
然后在最后一步中使用您的 DependencyService
模拟通过键盘以外的按钮按下 Enter 或在使用相机扫描条形码后,您可以这样做:
void OnButtonPressed(object sender, EventArgs e)
{
entry.Focus();
DependencyService.Get<IEnterService>().PressEnter();
}
我希望这对某些人有用,非常感谢大家:)