所以我在一个页面上有一个搜索栏(我的搜索栏都有自定义渲染器)。当用户填写搜索字词时,他们会重定向到搜索结果,并显示其结果。
我遇到的问题是,新页面上的搜索栏突然被聚焦(因为我将搜索词从上一页传递到此搜索栏中),软件键盘显示。
我想解雇键盘或阻止键盘显示。但是当用户点击搜索栏内部时,键盘可能会出现。
注意之前已经问过这个问题,我所遵循的答案从未成功过。在这里你可以找到我尝试过的东西
首先尝试:取消焦点 只是取消我的入口,没有工作。在我的构造函数和页面的OnAppearing代码中尝试了它
第二次尝试:关注其他元素 尝试集中我的列表视图,但键盘stil出现了
第三次尝试:依赖服务
https://forums.xamarin.com/discussion/comment/172077#Comment_172077
接口
public interface IKeyboardHelper
{
void HideKeyboard();
}
的iOS:
public class iOSKeyboardHelper : IKeyboardHelper
{
public void HideKeyboard()
{
UIApplication.SharedApplication.KeyWindow.EndEditing(true);
}
}
德罗伊德:
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();
}
}
}
Xamarin表格中的用法:
DependencyService.Get<IKeyboardHelper>().HideKeyboard();
修改
我的搜索页面的我的渲染器代码
protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var searchView = Control;
searchView.Iconified = true;
searchView.SetIconifiedByDefault(false);
// (Resource.Id.search_mag_icon); is wrong / Xammie bug
int searchIconId = Context.Resources.GetIdentifier("android:id/search_mag_icon", null, null);
var icon = searchView.FindViewById(searchIconId);
(icon as ImageView).SetImageResource(Resource.Drawable.search_zwart);
int cancelIconId = Context.Resources.GetIdentifier("android:id/search_close_btn", null, null);
var eicon = searchView.FindViewById(cancelIconId);
(eicon as ImageView).SetImageResource(Resource.Drawable.close_zwart);
}
}