处理硬件搜索以在ActionbarSherlock中显示searchview

时间:2013-07-09 15:33:16

标签: android actionbarsherlock searchview

我想知道如何做到这一点:当用户按下硬件搜索按钮时,它会在操作栏中打开搜索视图。

基本上我有一个托管片段的活动。 一个片段添加到ActionbarSherlock一个搜索视图,它工作正常:

@Override
public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu,
        MenuInflater inflater) {

    if(searchView==null)
        searchView = new SearchView(getSherlockActivity().getSupportActionBar().getThemedContext());

    searchView.setQueryHint(getString(R.string.search));
    searchView.setOnQueryTextListener(this);


        menu.add(Menu.NONE, R.string.search, Menu.NONE, R.string.search)
        .setIcon(R.drawable.abs__ic_search_api_holo_light)
        .setActionView(searchView)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    super.onCreateOptionsMenu(menu, inflater);
}

我想我也可以使用

捕获FragmentActivity中的硬件密钥
@Override
public boolean onSearchRequested() {

    //DO SOMETHING

    return super.onSearchRequested();
}

但是,当按下硬件搜索按钮时,我看不到如何打开搜索视图。

任何提示?

谢谢:)。

2 个答案:

答案 0 :(得分:1)

所以,在这里我如何设法使用硬件搜索键在sherlock操作栏中打开searchview:

在我的SherlockFragmentActivity中:

private Menu ABSMenu;

@Override

public boolean onCreateOptionsMenu(Menu menu) {
    ABSMenu = menu;
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onSearchRequested() {

    MenuItem mi = ABSMenu.findItem(R.string.search); // R.string.search is the id of the searchview
    if(mi!=null){
    if(mi.isActionViewExpanded())
     {
            mi.collapseActionView();
     }else 
     {
            mi.expandActionView();  
     }
    }

    return super.onSearchRequested();
}

答案 1 :(得分:0)

您可以展开搜索视图并将其折叠为

searchView.setIconified(false); 
searchView.setIconified(true);

这样您就可以以编程方式调用搜索视图