2015-06-24 10 views
12

Sto provando a creare un'applicazione Android che richiede più parametri durante la ricerca. Attualmente, ho un'interfaccia ricercabile e sono in grado di cercare dalla mia barra delle azioni. Tuttavia, voglio creare un guaito come barra di ricerca in cui ho 2 campi di testo per inserire nei dati, come mostrato nell'immagine:Yelp di Yelp come barra di ricerca in ActionBar

enter image description here

Come posso aggiungere un campo di testo aggiuntivo durante la ricerca? Ecco il codice che sto usando per inizializzare la ricerca

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

e qui è la mia 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" /> 

Grazie mille.

risposta

1

è possibile utilizzare actionBar.setCustomView(R.layout.custom_search); e impostare il livello di codice actionBar "visualizzazione personalizzata"

come questo:

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

uso setCustomView nella vostra 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; 
} 

Spero che questo funzionerà per voi.

Problemi correlati