我正在研究具有OTP屏幕的概念。 要求是在输入6位数OTP号码的最后一位时自动关闭键盘。
这是我到目前为止所做的-
&
然后我有一个<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="https://test.com/#gid=0&range=A1:B1" target="_blank">https://test.com/#gid=0&range=A1:B1</a>
</body>
</html>
,它覆盖了此方法-
if (lastOTPEntry.Value != string.Empty)
{
lastOTPEntry.Unfocus();
}
EntryRenderer
是protected override void OnFocusChangeRequested(object sender, VisualElement.FocusRequestArgs e).
{
if (Control != null).
{
if (e.Focus)
{
Control.RequestFocus();
}
else
{
Control.ClearFocus();
}
}
}
但是不知何故键盘无法关闭。
我在这里做错什么了..?
答案 0 :(得分:0)
我需要在较旧的项目中做类似的事情,最终使用服务模式来实现。
Android服务:
public class KeyboardService : IKeyboardService
{
public void HideKeyboard()
{
var context = Application.Context;
var inputMethodManager = context.GetSystemService(Context.InputMethodService) as InputMethodManager;
if (inputMethodManager != null && context is Activity)
{
var activity = context as Activity;
var token = activity.CurrentFocus?.WindowToken;
inputMethodManager.HideSoftInputFromWindow(token, HideSoftInputFlags.None);
activity.Window.DecorView.ClearFocus();
}
}
}
iOS服务:
public class KeyboardService : IKeyboardService
{
public void HideKeyboard()
{
UIApplication.SharedApplication.KeyWindow.EndEditing(true);
}
}
接口:
public interface IKeyboardService
{
void HideKeyboard();
}
要使用它,您需要在依赖服务中注册它才能解析它。解决后,要使用它:
if (lastOTPEntry.Value != string.Empty)
{
keyboardService.HideKeyboard();
}
我已经有一段时间没有接触过该项目了,但是逻辑仍然应该起作用。