2013-06-06 4 views
4

Lorsque j'utilise la configuration suivante:ne pouvait pas changer ActionBarSherlock icône SearchView

<item 
    android:id="@+id/menu_item_search" 
    android:actionViewClass="com.actionbarsherlock.widget.SearchView"   
    android:icon="@android:drawable/ic_menu_search" 
    android:showAsAction="ifRoom" 
    android:title="@string/action_search"/> 

ActionBarSherlock SearchView ne réagit pas sur Android fourni: icône

mais en cas de

android:showAsAction="ifRoom|collapseActionView" 

icône est modifié correctement mais le bouton de fermeture à l'intérieur de la vue de recherche est absent. Comment changer l'icône de recherche et afficher le bouton de fermeture dans le coin droit de la vue de recherche?

Ceci est mon AppTheme:

<style name="AppTheme" parent="AppBaseTheme">    
    <item name="android:windowBackground">@color/background_window</item> 
    <item name="android:actionBarStyle">@style/ActionBarStyle</item> 
    <item name="homeAsUpIndicator">@drawable/new_indicator</item> 
    <item name="android:homeAsUpIndicator">@drawable/new_indicator</item> 

    <!-- ActionBar (SearchView) fix --> 
    <item name="textColorPrimary">@color/abs__primary_text_holo_light</item> 
    <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item> 
    <item name="searchDropdownBackground">@drawable/abs__search_dropdown_dark</item> 
    <item name="searchViewTextField">@drawable/abs__textfield_searchview_holo_dark</item> 
    <item name="searchViewTextFieldRight">@drawable/abs__textfield_searchview_right_holo_dark</item>   
    <item name="searchViewCloseIcon">@drawable/abs__ic_clear</item> 
    <item name="searchViewSearchIcon">@drawable/abs__ic_voice_search</item> 
    <item name="searchViewGoIcon">@drawable/abs__ic_go</item> 
    <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search</item> 
    <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView.DarkActionBar</item>   
</style> 

<style name="Widget.Sherlock.SearchAutoCompleteTextView.DarkActionBar"> 
    <item name="android:textColor">?attr/textColorPrimaryInverse</item> 
</style> 
demande

de manifeste:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

menu actionbar:

<item 
    android:id="@+id/menu_item_search" 
    android:icon="@drawable/abs__ic_clear" 
    android:actionViewClass="com.actionbarsherlock.widget.SearchView"   
    android:showAsAction="ifRoom" 
    android:title="@string/action_search"/>  
<item 
    android:id="@+id/menu_item_contact" 
    android:icon="@drawable/ic_action_user" 
    android:showAsAction="ifRoom" 
    android:title="@string/action_contact"/> 

configuration du menu SearchView:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView(); 

    if (null != searchView) { 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(true);   
    } 

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
     public boolean onQueryTextChange(String newText) { 
      // this is your adapter that will be filtered 
      // adapter.getFilter().filter(newText); 
      return true; 
     } 

     public boolean onQueryTextSubmit(String query) { 
      // this is your adapter that will be filtered 
      // adapter.getFilter().filter(query); 
      return true; 
     } 
    }; 
    searchView.setOnQueryTextListener(queryTextListener); 

Répondre

7

Vous pouvez accomplir cela en définissant un attribut pour votre thème d'activité. Dans votre fichier styles.xml, ajoutez les lignes suivantes et assurez-vous d'appliquer MyTheme ou tout ce que vous voulez appeler à votre application ou à l'activité dans laquelle se trouve votre affichage de recherche. J'ai également ajouté l'attribut "searchAutoCompleteTextView" qui vous permettra de personnaliser la couleur du texte et tel que vous le souhaitez.

<style name="MyTheme" parent="Theme.Sherlock"> 
      <item name="searchViewCloseIcon">@drawable/YOUR_CLOSE_ICON</item> 
      <item name="searchViewSearchIcon">@drawable/YOUR_SEARCH_ICON</item> 
      <item name="searchAutoCompleteTextView">@style/searchTextView</item> 
    </style> 

    <style name="searchTextView" parent="Widget.Sherlock.SearchAutoCompleteTextView"> 
      <item name="android:textColor">@android:color/white</item> 
      <item name="android:textColorHint">@android:color/black</item> 
    </style> 
+1

merci pour votre réponse. J'ai ajouté @ drawable/abs__ic_voice_search à mon niveau d'application "AppTheme" mais l'icône searchview n'a pas changé .. – alexanoid

+0

J'ai mis à jour ma question – alexanoid

+0

@alexanoid Avez-vous mis à jour les valeurs-v11 et les valeurs? -v14 aussi? – Prasanna

Questions connexes