Search code examples
androidmaterial-designsearchbar

How implement the Google Play like search bar


I need to implement a search in my app and it should look like this

Google play store search bar

would someone please care enough to explain to me how its done.?? Thanks in advance


Solution

  • You can create a custom layout for that. 1. take a relative layout and give it a rounded bordered background to it. 2. add hamburger icon to left in it. 3. add mic icon to right in it. 4. Add edittext to it in the center. and then handle to click on both hamburger icon and mic icon manually.

    I have some code which is not exactly same but you can edit and change it accordingly.

    <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="@dimen/activity_horizontal_margin"
                android:layout_marginRight="@dimen/activity_horizontal_margin"
                android:background="@drawable/editext_border">
    
                <ImageView
                    android:id="@+id/iv_search_mic"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_centerVertical="true"
                    android:src="@drawable/ic_mic_green" />
    
                <EditText
                    android:id="@+id/ed_home_searchbar"
                    fontPath="fonts/weblysleekuisl.ttf"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_toLeftOf="@+id/iv_search_icon"
                    android:layout_toRightOf="@+id/iv_search_mic"
                    android:background="@android:color/transparent"
                    android:hint="@string/action_search"
                    android:imeOptions="actionSearch"
                    android:padding="10dp"
                    android:singleLine="true"
                    android:textColor="@color/colorText"
                    android:textCursorDrawable="@drawable/color_cursor"
                    android:textSize="@dimen/text_xxsmall" />
    
                <ImageView
                    android:id="@+id/iv_search_icon"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:src="@drawable/ic_search_green" />
    
            </RelativeLayout>
    

    and then handle the click event like open google voice search on mic click

    searchMic.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    OnSwap.getInstance().trackEvent(TAG, "searchMic", "searchMic Clicked");
                    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Search");
                    startActivityForResult(intent, VOICE_INPUT_REQUEST_CODE);
                }
            });
    

    and then onActivityResult method

    if (requestCode == VOICE_INPUT_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    ArrayList<String> matches = data.getStringArrayListExtra(
                            RecognizerIntent.EXTRA_RESULTS);
                    int matchSize = matches.size();
                    for (int index = 0; index < matchSize; index++) {
                        Log.i(TAG, String.valueOf(index) + ": " + matches.get(index));
                        if (index == 0) {
                            searchbar.setText(matches.get(index));
                        }
                    }
                } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
                    Status status = PlaceAutocomplete.getStatus(this, data);
                    // TODO: Handle the error.
                    Log.i(TAG, status.getStatusMessage());
                    Snackbar.make(locationTextView, status.getStatusMessage(), Snackbar.LENGTH_LONG).show();
    
                } else if (resultCode == RESULT_CANCELED) {
                    Snackbar.make(locationTextView, "Canceled", Snackbar.LENGTH_LONG).show();
                }
            }