我正在编写一个Xamarin应用程序(.net标准2.0)。目前,它只为Android开发,但将来可能会发布给其他操作系统。我想要处理的情况是:
我在自定义呈现器中请求焦点,而不是在Xamarin窗体条目中请求焦点,原因是我可以看到键盘弹出,然后在Xamarin Forms控件中请求它时立即消失。我不希望键盘出现,因为这个应用程序将主要用于工业设备的用户使用硬件键盘,但该条目将需要有重点,因为用户会想要立即输入文本。
我的问题是,在这个场景中,用户必须按两次后退按钮才能退出ContentPage。一次离开隐藏的键盘(条目失去焦点),然后再次退出页面。我想避免这一点-他们应该能够退出的网页,只有一次点击时,键盘是隐藏的。有人知道怎么解决这个问题吗?正如其他答案所示,我尝试过在自定义呈现器中重写OnKeyPreIme,但它似乎没有检测到回击。
发布于 2018-07-25 21:39:59
当你的条目聚焦时,你可以使用隐藏键盘方法。也许能解决你的问题。
public interface IKeyboardHelper
{
void HideKeyboard();
}
对于Android的使用:
public class DroidKeyboardHelper : IKeyboardHelper
{
public void HideKeyboard()
{
var context = Forms.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 iOSKeyboardHelper : IKeyboardHelper
{
public void HideKeyboard()
{
UIApplication.SharedApplication.KeyWindow.EndEditing(true);
}
}
使用Dependency Injection
并在条目聚焦时调用此方法。
尝试使用下面的方法来处理按下的回按钮事件。
protected override bool OnBackButtonPressed()
{
// you can handle back button pressed event in Xamarin forms page
return base.OnBackButtonPressed();
}
发布于 2018-09-17 02:49:31
我(终于)想出了办法。关键不是覆盖OnKeyPreIME,而是DispatchKeyEventPreIme。这让你可以拦截‘背面’的新闻。因此,在我的CustomRenderer中,我添加了以下方法:
public override bool DispatchKeyEventPreIme(KeyEvent e)
{
//if this is back press and the sip is not visible then we need to call the 'OnBack' method at the view model level
if(!SIPVisibleListener.IsSIPVisible && e.KeyCode == Keycode.Back)
{
if(XamarinFormsControl != null && XamarinFormsControl is IOnBackHandler)
{
((IOnBackHandler)XamarinFormsControl).GoBack();
}
}
return base.DispatchKeyEventPreIme(e);
}
IOnBackHandler是我为处理后键按下而创建的一个接口。SIPVisibleListener是基于对这个问题的回答:How do I Detect if Software Keyboard is Visible on Android Device?希望这能帮助到某人。
https://stackoverflow.com/questions/51513794
复制相似问题