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;
}
};
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;
}
});