Search code examples
androidmaterial-designsearchview

Change default search icon position in search view


I use Search view in my project for adding search ability for users. my problem is I want to change search icon position from right side of toolbar to left side.

this is my menu code:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item
    android:id="@+id/action_search"
    android:title="@android:string/search_go"
    android:icon="@drawable/search"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:visible="true"/>

and this is my activity code:

private SearchView mSearchView;
private MenuItem searchMenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    searchMenuItem = menu.findItem(R.id.action_search);
    mSearchView = (SearchView) searchMenuItem.getActionView();
    mSearchView.setLayoutParams(new ActionBar.LayoutParams(Gravity.LEFT));
    mSearchView.setOnQueryTextListener(listener);
    return true;
}

SearchView.OnQueryTextListener listener = new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        if (query.equals("") || query.equals(" ")){
            Toast.makeText(G.context,"ابتدا یک متن برای جستجو بنویسید.",Toast.LENGTH_SHORT).show();
            return false;
        }
        Intent intent = new Intent(ContentsActivity.this,SearchActivity.class);
        intent.putExtra("KEYWORD", query);
        ContentsActivity.this.startActivity(intent);
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }
};

Solution

  • So finally I found solution. note that it is not a good solution. but it's works fine for me.

    in menu_main.xml:

    <item
        android:id="@+id/action_search"
        android:title="@android:string/search_go"
        android:icon="@drawable/search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:visible="false"/>
    

    in the menu file i set the visibility of search icon to the false. so now when user clicks on my search icon in the toolbar i set the visibility to true.

    imgCatSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSearchView.setBackgroundColor(Color.WHITE);
                Animation anim = AnimationUtils.loadAnimation(G.context,R.anim.m_anim);
                searchMenuItem.setVisible(true);
                mSearchView.setIconified(false);
                mSearchView.startAnimation(anim);
            }
        });
    

    So when user clicks on search button in action bar the search view visibility turned to true and opened.

    finally this code is for when user clicks on close button in searchView :

    mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                searchMenuItem.setVisible(false);
                return false;
            }
        });