如何在失去焦点的情况下折叠searchview

时间:2015-09-08 10:05:46

标签: android xamarin searchview

我有一个动作栏搜索视图,如下所示

public override bool OnCreateOptionsMenu(IMenu menu)
    {
        var inflater = MenuInflater;
        inflater.Inflate(Resource.Menu.main, menu);
        _searchItem = menu.FindItem(Resource.Id.action_search);
        var view = MenuItemCompat.GetActionView(_searchItem);

        _searchItem.SetVisible(_isSearchVisible);
        _searchView = view.JavaCast<SearchView>();

        var searchBarId = _searchView.Context.Resources.GetIdentifier("android:id/search_bar", null, null);
        var searchBar = (LinearLayout) _searchView.FindViewById(searchBarId);
        searchBar.LayoutTransition = new LayoutTransition();

        if (_searchView == null) return base.OnCreateOptionsMenu(menu);
        var columns = new[]
        {
            BaseColumns.Id, SearchManager.SuggestColumnText1, SearchManager.SuggestColumnText2,
            SearchManager.SuggestColumnText2Url
        };
        _suggestionsAdapter = new SearchSuggestionsAdapter(this, Resource.Layout.search_suggestion_item, null,
            columns, new[] {Resource.Id.title});
        _searchView.SuggestionsAdapter = _suggestionsAdapter;

        _searchView.SuggestionClick += (sender, e) =>
        {
            ////Handle suggestion click
        };
        _searchView.QueryTextChange += async (sender, e) =>
        {
            if (e.NewText.Length > 2)
            {
                await LoadSuggestions(e.NewText);
            }

            e.Handled = true;
        };

        _searchView.QueryTextSubmit += async (sender, e) =>
        {
            if (e.Query.Length > 2)
            {
                await LoadSuggestions(e.Query);
            }

            e.Handled = true;
        };

        return base.OnCreateOptionsMenu(menu);
    }

我的问题是当点击搜索视图时显示键盘,但每当我点击搜索视图外的任何地方时它都不会失去焦点,只有在点击搜索视图中的关闭按钮时它才会失去焦点。 我怎样才能实现playstore的功能,比如使搜索视图后面的显示变暗,如果单击该部分,搜索视图应该关闭

我尝试使用

_searchView.QueryTextFocusChange += (s, e) => { };

但它仅在单击搜索图标时调用,或者单击关闭图标而不是在单击任何其他屏幕部分时调用。

由于

0 个答案:

没有答案