Basics of SearchView in Android

Introduction

Search is a very common feature in any type of the application whether the application is a web application or console application. Now let us talk Android and mobile applications. Android applications also have search features of their own.

Android enabled devices have a very robust feature of search queries within the devices or searching with the web so that it is combined in the device itself. A user can search for something in the Android device and user settings can be saved on that devices and when the user searches in the future again for something and the matched characters would show and the previous search words appear in the dropdown selection list.

Let us see an example in which we have a dictionary application. When we begin the search in the dictionary search provider tab, there are suggestions based on recent searches or after five or four search results we have seen that what happens is when the user type a word again into that space then the previous searched keyword is shown below the typing space as in the form of a list.

searchview

Features of Search Widgets

  • Enable voice search

  • Provide search suggestions based on recent user queries

  • Provide custom search suggestions that match actual results in your application data

  • Offer your application's search suggestions in the system-wide Quick Search Box
Creating a search Interface

In an Android application a search interface could be created using two methods, namely by search widgets or with a search dialog box. 
  • The search dialog is a UI component that's controlled by the Android system. When activated by the user, the search dialog appears at the top of the activity as we have already learned in previous articles.

    The Android system controls all events in the search dialog. When the user submits a query, the system delivers the query to the activity that we have defined and coded as in the following so that it can specify to handle searches. The dialog can also provide search suggestions while the user types.

  • The search widget is an instance of SearchView so that we can place it anywhere in your layout. By default, the search widget behaves like a standard  EditText widget but does nothing more.
Note:  However, the search widget is available only in Android 3.0 (API Level 11) and higher.

However a user's query must be saved in the locale using an Intent so as to provide an efficient search for it. To enhance this use the following procedure:
  • A searchable configuration

    An XML file that configures some settings for the search dialog or widget. It includes settings for features such as voice search, search suggestion and hint text for the search box.

  • A searchable activity

    The Activity that receives the search query, searches your data and displays the search results.

  • The search dialog

    By default, the search dialog is hidden, however we can enable it if needed but most commonly it appears at the top of the screen when you call onSearchRequested() (when the user presses your Search button).
  • SearchView widget

    Using the search widget allows you to put the search box anywhere in your activity. Instead of putting it in your activity layout, you should usually use SearchView as an action view in the Action Bar.

    Creating a Searchable Configuration

    For creating a searchable configuration we must use the code for a search widget or a dialog in the XML layout file. It configures certain UI aspects of the search dialog.

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <searchable xmlns:android="http://schemas.android.com/apk/res/android"  
    3. android:label="@string/app_label"  
    4. android:hint="@string/search_hint" >  
    5. </searchable>  

    The android :label attribute is the only required attribute. However it is pointing towards a string resources. Its attributes must be defined in the string.xml file.

    The <searchable> element accepts several other attributes. However you don't need most attributes until one must attach the features on the search suggestions and voice search.

    Creating the Searchable Activity

    • Declare the activity to accept the ACTION_SEARCH intent, in an <intent-filter> element.

    • Specify the searchable configuration to use, in a <meta-data> element.
    activity_main.xml
    1. <application ... >  
    2. <activity android:name=".SearchableActivity" >  
    3. <intent-filter>  
    4.    1<action android:name="android.intent.action.SEARCH" />  
    5. </intent-filter>  
    6.    <meta-data android:name="android.app.searchable"  
    7. android:resource="@xml/searchable"/>  
    8. </activity>  
    9. ...  
    10. </application>  
    Note: The <intent-filter> does not need a <category> with the DEFAULT value because the system delivers the ACTION_SEARCH intent explicitly to searchable activity.

    Performing a search

    This includes the following three steps basically:
    • Receiving the result
    • Searching your data
    • Presenting the results
    Receiving the query

    When a user executes a search from the search dialog or widgets then the system starts your searchable activity and sends it an ACTION _SEARCH intent. An intent can carry the information. Here it carries the search result.
    1. import android.app.Activity;  
    2. import android.os.Bundle;  
    3. import android.view.Menu;  
    4. import android.view.MenuItem;  
    5.   
    6.   
    7. public class RecentActivity extends Activity {  
    8.   
    9. @Override  
    10. protected void onCreate(Bundle savedInstanceState) {  
    11.    super.onCreate(savedInstanceState);  
    12.    setContentView(R.layout.activity_recent);  
    13. // Get the intent, verify the action and get the query  
    14.    Intent intent = getIntent();  
    15.    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {  
    16.       String query = intent.getStringExtra(SearchManager.QUERY);  
    17.       doMySearch(query);  
    18. }  
    19.   
    20.   
    21. @Override  
    22. public boolean onCreateOptionsMenu(Menu menu) {  
    23. // Inflate the menu; this adds items to the action bar if it is present.  
    24.    getMenuInflater().inflate(R.menu.recent, menu);  
    25.    return true;  
    26. }  
    27.   
    28. @Override  
    29. public boolean onOptionsItemSelected(MenuItem item) {  
    30. // Handle action bar item clicks here. The action bar will  
    31. // automatically handle clicks on the Home/Up button, so long  
    32. // as you specify a parent activity in AndroidManifest.xml.  
    33.    int id = item.getItemId();  
    34.    if (id == R.id.action_settings) {  
    35.       return true;  
    36.    }  
    37.       return super.onOptionsItemSelected(item);  
    38.       }  
    39. }  
    Searching Data using Search Widget

    The processing and storing of the data in an Android application using the database sqlite is done uniquely. The SearchView widgets is available in Android 3.0 and higher. If we are developing for the Android version 3.0 and higher then we must insert search widgets as an action view in the ActionBar.

    Configuring the search widgets

    After you've created a searchable configuration and a searchable activity  as discussed above you need to enable searching. For example, if you're using a SearchView as an action view in the Action Bar, you should enable the widget during the onCreateOptionsMenu() callback:

    1. @Override  
    2. public boolean onCreateOptionsMenu(Menu menu) {  
    3. // Inflate the options menu from XML  
    4. MenuInflater inflater = getMenuInflater();  
    5. inflater.inflate(R.menu.options_menu, menu);  
    6.   
    7. // Get the SearchView and set the searchable configuration  
    8. SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);  
    9. SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();  
    10. // Assumes current activity is the searchable activity  
    11. searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));  
    12. searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default  
    13.   
    14. return true;  
    15. }  
    Other features of Search Widgets 
    • A submit button

      By default, there's no button to submit a search query, so the user must press the "Return" key on the keyboard to initiate a search. You can add a "submit" button by calling setSubmitButtonEnabled(true).
       
    • Query refinement for search suggestions

      Search optimizing such that we could search very accurately so as processor needed to refine this is good and however you can add a button alongside each suggestion that inserts the suggestion in the search box for refinement by the user, by calling setQueryRefinementEnabled(true).
       
    • The ability to toggle the search box visibility

      Toggling the search using a toggles button is very common and it is one of the main features to toggle. By default, the search widget is "iconified," meaning that it is represented only by a search icon (a magnifying glass), and expands to show the search box when the user touches it. As shown above, you can show the search box by default, by calling setIconifiedByDefault(false). You can also toggle the search widget appearance by calling setIconified().

    Summary

    This article illustrates the basics of search widgets and SearchView objects and the various aspects of them. This article has clearly explained how to configure the search widgets and search the data using it.

    Up Next
      Ebook Download
      View all
      Learn
      View all