Xamarin解雇键盘

时间:2017-08-25 08:24:33

标签: xamarin xamarin.forms keyboard

所以我在一个页面上有一个搜索栏(我的搜索栏都有自定义渲染器)。当用户填写搜索字词时,他们会重定向到搜索结果,并显示其结果。

我遇到的问题是,新页面上的搜索栏突然被聚焦(因为我将搜索词从上一页传递到此搜索栏中),软件键盘显示。

我想解雇键盘或阻止键盘显示。但是当用户点击搜索栏内部时,键盘可能会出现。

注意之前已经问过这个问题,我所遵循的答案从未成功过。在这里你可以找到我尝试过的东西

首先尝试:取消焦点 只是取消我的入口,没有工作。在我的构造函数和页面的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);
            }
        }

0 个答案:

没有答案