This beautiful and easy to use library will help to add Lollipop Material Design SearchView in your project.
#How to use
to include SearchBar to your project:
add this code to the the project level build.gradle file
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
add the dependency to the the app level build.gradle file
dependencies {
compile 'com.github.mancj:MaterialSearchBar:0.3.5-beta'
}
then add SearchBar to your activity:
<com.mancj.materialsearchbar.MaterialSearchBar
app:speechMode="true"
app:hint="Custom hint"
app:maxSuggestionsCount="10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/searchBar" />
MaterialSarchBar has the following xml attributes:
attribute | description |
---|---|
hint | Set custom prompt in the search box |
speechMode | If set to true, microphone icon will display instead of the search icon. |
maxSuggestionsCount | Specifies the maximum number of search queries stored until the activity is destroyed |
searchIconDrawable | Set search icon drawable resource |
navIconDrawable | Set navigation icon drawable resource |
textColor | Change text color |
hintColor | Change text hint color |
navIconEnabled | Set navigation icon enabled |
placeholder | Set the place holder text before any click is performed to |
public methods:
disableSearch()
enableSearch()
isSearchEnabled()
setText(String text)
getText()
setHint(CharSequence hint)
setNavButtonEnabled(boolean navButtonEnabled)
setSpeechMode(boolean speechMode)
setOnSearchActionListener(OnSearchActionListener onSearchActionListener)
setLastSuggestions(List<String> suggestions)
getLastSuggestions()
setMaxSuggestionCount(int maxQuery)
setSearchIcon(int searchIconResId)
setNavigationIcon(int navigationIconResId)
setTextColor(int textColor)
setTextHintColor(int hintColor)
inflateMenu(int menuResource)
getMenu()
addTextChangeListener(TextWatcher textWatcher)
setCardViewElevation(int elevation)
setPlaceHolder(CharSequence placeholder)
To save search queries when the activity is destroyed, use the method searchBar.getLastSuggestions()
and then, to restore them use searchBar.setLastSuggestions(List<String>);
as shown in the example below
#Example
Here is a simple example of using MaterialSearchBar
private List<String> lastSearches;
private MaterialSearchBar searchBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchBar = (MaterialSearchBar) findViewById(R.id.searchBar);
searchBar.setHint("Custom hint");
searchBar.setSpeechMode(true);
//enable searchbar callbacks
searchBar.setOnSearchActionListener(this);
//restore last queries from disk
lastSearches = loadSearchSuggestionFromDisk();
searchBar.setLastSuggestions(list);
//Inflate menu and setup OnMenuItemClickListener
searchBar.inflateMenu(R.menu.main);
searchBar.getMenu().setOnMenuItemClickListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//save last queries to disk
saveSearchSuggestionToDisk(searchBar.getLastSuggestions());
}
@Override
public void onSearchStateChanged(boolean enabled) {
String s = enabled ? "enabled" : "disabled";
Toast.makeText(MainActivity.this, "Search " + s, Toast.LENGTH_SHORT).show();
}
@Override
public void onSearchConfirmed(CharSequence text) {
startSearch(text.toString(), true, null, true);
}
@Override
public void onButtonClicked(int buttonCode) {
switch (buttonCode){
case MaterialSearchBar.BUTTON_NAVIGATION:
drawer.openDrawer(Gravity.LEFT);
break;
case MaterialSearchBar.BUTTON_SPEECH:
openVoiceRecognizer();
}
}