Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Yelp like Search bar in ActionBar

I am trying to create android application that takes multiple parameters when searching. Currently, I have a searchable interface and am able search from my action bar. However, I want to create a yelp like search bar where I have 2 text fields to enter in data as shown in the image:

enter image description here

How can I add an additional text field when searching? Here is the code I am using to initalize the search

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_home, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView =
            (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    // set query change listener to hide keyboard after input has been
    // submitted
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {

            // hides and then unhides search tab to make sure keyboard
            // disappears when query is submitted
            searchView.clearFocus();
            return false;
        }
    });

and here is my menu_layout:

<item
    android:id="@+id/action_search"
    android:title="@string/search"
    android:orderInCategory="100"
    impulz:showAsAction="always"
    impulz:actionViewClass="android.widget.SearchView"/>

<item android:id="@+id/action_settings" android:title="@string/action_settings"
    android:orderInCategory="100" impulz:showAsAction="never" />

Thank you very much.

like image 414
Parnit Avatar asked Jun 24 '15 16:06

Parnit


1 Answers

you can use actionBar.setCustomView(R.layout.custom_search); and set the actionBar programmatically "custom view"

like this:

custom_search.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="right"
    android:orientation="horizontal">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"             
    android:orientation="vertical" >
    <com.actionbarsherlock.widget.SearchView
        android:id="@+id/search1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:iconifiedByDefault="false"
        android:visibility="invisible" />
   <com.actionbarsherlock.widget.SearchView
        android:id="@+id/search2"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:iconifiedByDefault="false"
        android:visibility="invisible" />
    </LinearLayout>
    <ImageButton
        android:id="@+id/btn_search_content"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/search_content" />

</LinearLayout>

menu.xml

<item
    android:id="@+id/menu_search"
    android:icon="@drawable/red_icon"
    android:showAsAction="always"
    android:title="search" />

use setCustomView into your onCreate()

MainActivity

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    actionBar.setCustomView(R.layout.custom_search);
    actionBarCustomView = action_bar.getCustomView();
    searchView = ((SearchView)     actionBarCustomView.findViewById(R.id.search1));
    searchView2 = ((SearchView) actionBarCustomView.findViewById(R.id.search2));
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            searchView.setVisibility(View.INVISIBLE);
            searchView2.setVisibility(View.INVISIBLE);
            return false;
        }
    });
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.menu_search:
            //set visibilty 
           //do what ever you want
            break;

    }
    return true;
}

Hope this will work out for you.

like image 155
Ahmad Sanie Avatar answered Oct 05 '22 23:10

Ahmad Sanie