输入最后一个OTP数字时关闭键盘

时间:2020-08-05 15:40:48

标签: xamarin xamarin.forms xamarin.android xamarin.ios custom-renderer

我正在研究具有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&amp;range=A1:B1" target="_blank">https://test.com/#gid=0&amp;range=A1:B1</a> </body> </html> ,它覆盖了此方法-

if (lastOTPEntry.Value != string.Empty)
{
    lastOTPEntry.Unfocus();
}

EntryRendererprotected override void OnFocusChangeRequested(object sender, VisualElement.FocusRequestArgs e). { if (Control != null). { if (e.Focus) { Control.RequestFocus(); } else { Control.ClearFocus(); } } } 但是不知何故键盘无法关闭。 我在这里做错什么了..?

1 个答案:

答案 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();
}

我已经有一段时间没有接触过该项目了,但是逻辑仍然应该起作用。