Search code examples
androidactionbarsherlock

How to change dismiss (home) button of searchview in Sherlock action bar?


When you enter in searchview mode with the action bar, the home button is changed to the manifest android:icon drawable for some reason. Is there a way to keep it unchanged or to change it back to the android:logo drawable?

Here's what I'm doing:

@Override
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) 
{
    getSherlockActivity().getSupportMenuInflater().inflate(R.menu.places_menu, menu);

    SearchManager searchManager = (SearchManager) getSherlockActivity().getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView = (SearchView) menu.findItem(R.id.item_menu_search).getActionView();

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() 
    {
        public boolean onQueryTextChange(String newText) 
        {
            // this is your adapter that will be filtered
            mAdapter.getFilter().filter(newText);
            return true;
        }

        public boolean onQueryTextSubmit(String query) 
        {
            // this is your adapter that will be filtered
            mAdapter.getFilter().filter(query);
            return true;
        }
    };

    if (null != searchView )
    {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getSherlockActivity().getComponentName()));
        searchView.setIconifiedByDefault(false);  
        searchView.setOnQueryTextListener(queryTextListener);

        // CLOSE SEARCH WHEN SOFT KEYBOARD DISSMISSES
        searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean queryTextFocused) {
                if(!queryTextFocused) {
                    menu.findItem(R.id.item_menu_search).collapseActionView();
                    searchView.setQuery("", false);
                }
            }
        });
    }

    super.onCreateOptionsMenu(menu, inflater);
}

Solution

  • It seems to be possible by calling setIcon() with the logo.

    ActionBar actionBar = getActionBar();
    actionBar.setLogo(R.drawable.ab_logo);
    actionBar.setIcon(R.drawable.ab_logo);