2015-06-24 23 views
12

Próbuję stworzyć aplikację dla Androida, która podczas wyszukiwania wymaga wielu parametrów. Obecnie mam przeszukiwalny interfejs i jestem w stanie szukać z mojego paska akcji. Jednakże chcę, aby stworzyć jak skowyt pasku wyszukiwania, gdzie mam 2 pola tekstowe, aby wprowadzić dane w sposób pokazany na obrazku:Android Yelp jak pasek wyszukiwania w ActionBar

enter image description here

Jak mogę dodać dodatkowe pole tekstowe podczas wyszukiwania? Oto kod używam do initalize poszukiwaniu

@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; 
     } 
    }); 

i tu jest moje 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" /> 

Dziękuję bardzo.

Odpowiedz

1

można użyć actionBar.setCustomView(R.layout.custom_search); i ustawić actionBar programowo "widok niestandardowy"

tak:

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" /> 

użycie setCustomView do swojej onCreate()

główną działalność

@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; 
} 

nadzieję, że będzie pracować dla Ciebie.