Android Material ToolBar SearchBar/SearchView Example - How to filter search a simple GridView.
It's true we have looked at several searchview examples previously. However, we have been using the ordinary searchview that we normally display in our content section.
A more popular approach is using a searchview/searchbar placed in the toolbar or appbar of our activity. It's what we look at in this example. We use a toolbar searchbar to search/filter our simple GridView.
Android ToolBar SearchBar Android ToolBar Material SearchBar Project Structure
This example was written with the following tools:
Lets jump directly to the source code.
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.tutorials.hp.searchbargridview"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
compile 'com.android.support:design:25.3.1'
compile 'com.github.mancj:MaterialSearchBar:0.7.1'
}
package com.tutorials.hp.searchbargridview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.Toast;
import com.mancj.materialsearchbar.MaterialSearchBar;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
/*
- When activity is created.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//INITIALIZE GRIDVIEW AND MATERIAL SEARCHBAR
GridView gv= (GridView) findViewById(R.id.mGridView);
MaterialSearchBar searchBar = (MaterialSearchBar) findViewById(R.id.searchBar);
searchBar.setHint("Search..");
searchBar.setSpeechMode(true);
List<String> galaxies=new ArrayList<>();
galaxies.add("Cartwheel");
galaxies.add("Whirlpool");
galaxies.add("Andromeda I");
galaxies.add("Andromeda II");
galaxies.add("Sombrero");
galaxies.add("Messier 81");
galaxies.add("Messier 87");
galaxies.add("Canis Majos Over-density");
galaxies.add("Messier 92");
galaxies.add("Black Eye");
galaxies.add("Centaurus A");
galaxies.add("Centaurus B");
galaxies.add("Milky Way");
galaxies.add("IC 1011");
galaxies.add("Star Bust");
galaxies.add("Hoag's Object");
galaxies.add("Pinwheel");
galaxies.add("Triangulum");
galaxies.add("Cosmos Redshift");
galaxies.add("Ursa Minor");
galaxies.add("Virgo Stellar-Stream");
//ADAPTER
final ArrayAdapter adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,galaxies);
gv.setAdapter(adapter);
//TEXT CHANGE LISTENER
searchBar.addTextChangeListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//SEARCH FILTER
adapter.getFilter().filter(charSequence);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
//HANDLE GRIDVIEW ITEM CLICK
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, adapter.getItem(i).toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tutorials.hp.searchbargridview.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<com.mancj.materialsearchbar.MaterialSearchBar
app:mt_speechMode="true"
app:mt_hint="Custom hint"
app:theme="@style/AppTheme.PopupOverlay"
app:mt_maxSuggestionsCount="5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/searchBar" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.tutorials.hp.searchbargridview.MainActivity"
tools:showIn="@layout/activity_main">
<GridView
android:id="@+id/mGridView"
android:numColumns="2"
android:layout_width="match_parent"
android:layout_height="match_parent">
</GridView>
</android.support.constraint.ConstraintLayout>
https://www.youtube.com/watch?v=JjwwrCS8Xmc
Oclemy,Cheers.