Android ActionBar Customize Search View Android ActionBar Customize Search View android android

Android ActionBar Customize Search View


I did a class SearchViewFormatter to format easily the native SearchView android widget. An example:

new SearchViewFormatter()            .setSearchBackGroundResource(R.drawable.my_bg)            .setSearchIconResource(R.drawable.my_ic, true, false) //true to icon inside edittext, false to outside            .setSearchVoiceIconResource(R.drawable.my_ic)            .setSearchTextColorResource(R.color.my_color)            .setSearchHintColorResource(R.color.my_color)            .setSearchCloseIconResource(R.drawable.my_ic)            .setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)            .format(mSearchView);


FYI now with ActionBar support v7 appcompat the way for change query hint color, text color, text size:

import android.support.v4.view.MenuItemCompat;import android.support.v7.widget.SearchView;import android.support.v7.widget.SearchView.SearchAutoComplete;...@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.menu_home, menu);    MenuItem searchItem = menu.findItem(R.id.item_search);    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);    mSearchView.setOnQueryTextListener(this);    mSearchView.setQueryHint(getString(R.string.text));    SearchAutoComplete searchAutoComplete = (SearchAutoComplete) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);    searchAutoComplete.setHintTextColor(mRes.getColor(android.R.color.white));    searchAutoComplete.setTextSize(14);    return super.onCreateOptionsMenu(menu);}


I did rounded corner for Edit Text like this.

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);        View searchPlate = searchView.findViewById(searchPlateId);        searchPlate.setBackgroundResource(R.drawable.bg_white_rounded);        int searchSrcTextId = getResources().getIdentifier("android:id/search_src_text", null, null);        EditText searchEditText = (EditText) searchView.findViewById(searchSrcTextId);        searchEditText.setTextColor(Color.BLACK);        searchEditText.setHintTextColor(Color.LTGRAY);        int closeButtonId = searchView.getContext().getResources().getIdentifier("android:id/search_close_btn", null, null);        ImageView closeButtonImage = (ImageView) searchView.findViewById(closeButtonId);        closeButtonImage.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN);

bg_white_background.xml:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="#ffffff"/>    <corners android:radius="8dp"/></shape>

Before click search button

After click search button

<SearchView                android:id="@+id/searchView"                android:layout_width="match_parent"                android:queryHint="Serach"                android:layout_height="match_parent"></SearchView>