Home

Awesome

This project is deprecated

It's not been maintained for well over half a year and is formally discontinued. There are better alternatives now, such as SearchView and FloatingSearchView

Android Persistent Search Library

A library that implements the persistent search bar seen on apps such as Google Now, Google Maps and Google Play

GIF of its use

Usage

Android Studio: Add the Sonatype repository if you have not already:

maven {
        url "https://oss.sonatype.org/content/repositories/snapshots"
    }

Import it as a dependency:

compile 'com.quinny898.library.persistentsearch:library:1.1.0-SNAPSHOT'

Eclipse: Import it as a library project

In your layout:

<com.quinny898.library.persistentsearch.SearchBox
        android:layout_width="wrap_content"
		android:layout_height="wrap_content"
        android:id="@+id/searchbox"
        />

Please include this after any elements you wish to be hidden by it in a releativelayout.

Absolute requirements in the activity code

In your onCreate/onCreateView (activity or fragment):

search.enableVoiceRecognition(this);

And in the same class:

@Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (isAdded() && requestCode == SearchBox.VOICE_RECOGNITION_CODE && resultCode == getActivity().RESULT_OK) {
      ArrayList<String> matches = data
          .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
      search.populateEditText(matches);
    }
    super.onActivityResult(requestCode, resultCode, data);
}

More on implementation:

search = (SearchBox) findViewById(R.id.searchbox);
for(int x = 0; x < 10; x++){
	SearchResult option = new SearchResult("Result " + Integer.toString(x), getResources().getDrawable(R.drawable.ic_history));
	search.addSearchable(option);
}		
search.setLogoText("My App");
search.setMenuListener(new MenuListener(){

		@Override
		public void onMenuClick() {
			//Hamburger has been clicked
			Toast.makeText(MainActivity.this, "Menu click", Toast.LENGTH_LONG).show();				
		}
			
	});
search.setSearchListener(new SearchListener(){

	@Override
	public void onSearchOpened() {
		//Use this to tint the screen
	}

	@Override
	public void onSearchClosed() {
		//Use this to un-tint the screen
	}

	@Override
	public void onSearchTermChanged() {
		//React to the search term changing
		//Called after it has updated results
	}

	@Override
	public void onSearch(String searchTerm) {
		Toast.makeText(MainActivity.this, searchTerm +" Searched", Toast.LENGTH_LONG).show();
		
	}
	
	@Override
	public void onResultClick(SearchResult result){
		//React to a result being clicked
	}
	
	
	@Override
	public void onSearchCleared() {
				
	}
			
});

##Showing from a MenuItem

search.revealFromMenuItem(R.id.action_search, this);

Note that when a search occurs, the box closes. You should react to this in onSearch, maybe set your toolbar title?

Custom

Set the logo text color:

search.setLogoTextColor(Color.parse("#000000"));

SearchResult

This is a class that holds two parameters - Title and icon<br /> The title is displayed as a suggested result and will be used for searching, the icon is displayed to the left of the title in the suggestions (eg. a history icon)<br /> You can make a SearchResult as follows<br />

new SearchResult("Title", getResources().getDrawable(R.drawable.icon));

All usage methods

See here for the documentation: http://quinny898.co.uk/PersistentSearch/

Licence

Copyright 2015 Kieron Quinn<br /> <br /> Licensed under the Apache License, Version 2.0 (the "License");<br /> you may not use this file except in compliance with the License.<br /> You may obtain a copy of the License at<br /> <br /> http://www.apache.org/licenses/LICENSE-2.0<br /> <br /> Unless required by applicable law or agreed to in writing, software<br /> distributed under the License is distributed on an "AS IS" BASIS,<br /> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br /> See the License for the specific language governing permissions and<br /> limitations under the License.