45 votes

Barre d'action Android Personnaliser l'affichage de la recherche

--- RÉSOLUTION DE PROBLÈMES - AJOUTÉ LES RÉPONSES À MODIFIER DU TEXTE ---

Je suis à l'aide de l'ActionBar Sherlock dans mon Application Android. Là j'ai envie de montrer un searchView. Il fonctionne très bien jusqu'à présent, mais je me rends compte, je suis en train de faire quelque chose de mal en essayant de le personnaliser.

J'ai créer cette façon:

searchView.setQueryHint("Search: ");
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(...);

searchMenuItem = menu.add("Search place");
searchMenuItem.setIcon(R.drawable.ic_action_search)
              .setActionView(searchView)
              .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |  MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

Je veux faire deux choses:

  1. Changer la couleur du texte "Rechercher" qui est indiqué dans la boîte de texte du champ. Il semble que j'ai changé avec l'ensemble du style de texte dans mon thème, mais j'espère que je peux mettre une couleur en quelque sorte.

  2. Lors de l'ouverture de cette recherche, il apparaît sur le côté gauche de la Barre d'Action. Mais j'ai besoin de lui sur le côté droit. L'icône (la loupe) est en fait sur le côté droit de la barre, mais cliquer sur le bouton ouvre la EditTextfield sur le côté gauche. J'ai essayé d'utiliser LayoutParams mais il me manque quelque chose d'essentiel lorsque vous essayez de l'ajouter à la Barre d'Action en utilisant LayoutParams.

enter image description here

J'espère donc que quelqu'un pourrait m'aider.

Merci beaucoup, Tobias

---- EDIT ----

Bon, une chose est donc résolu avec cette déjà. L'ajout de l'ActionBar par XML, le TextEdit pour le droit.

getSupportMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
Log.e(TAG, "searchView: " + searchView);

Et dans mon menu.xml

<item android:id="@+id/action_search"
 android:title="Search"
 android:icon="@drawable/ic_action_search"          
 android:showAsAction="always"
 android:actionViewClass="com.actionbarsherlock.widget.SearchView" />

Ainsi, au moins un mystère résolu (pourquoi cela fait une différence). Mais le XML nouvellement créé et Ne se ferme plus lors de l'appel

searchMenuItem.collapseActionView();

Donc, il est encore quelque chose de mal avec elle.

--- EDIT 2 ---

Juste pour vous laisser savoir. J'ai trouvé la solution pour la couleur du texte. Il peut être réalisé à l'aide de la AutoCompleteTextView de la SearchView:

AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(R.color.white));
searchText.setTextColor(getResources().getColor(R.color.white));    

Ainsi, le dernier problème que j'ai est que le SearchView n'est pas la fermeture de plus lors de la soumission d'un texte. Donc collapseActionView (), etc. ne fonctionne pas. Des idées?

--- EDIT 3 ---

Bon, j'ai trouvé une solution. Je ne sais pas si c'est la bonne façon de le faire, mais lors de l'utilisation de

((SearchView) searchMenuItem.getActionView()).setIconified(true);

il ferme l'EditText

Je dois le faire deux fois car la première fois, c'est seulement la "suppression" de mon texte d'entrée et montre le "soupçon", alors que la seconde est la "fermeture" de l'Indice EditText et s'effondre le searchView à la loupe. Maladroit style, mais il fonctionne. :-)

29voto

ademar111190 Points 2855

J'ai fait une classe SearchViewFormatter pour formater facilement le widget Android SearchView natif. Un exemple:

 new SearchViewFormatter()
            .setSearchBackGroundResource(R.drawable.my_bg)
            .setSearchIconResource(R.drawable.my_ic, true, false) //true to icon inside edittext, false to outside
            .setSearchVoiceIconResource(R.drawable.my_ic)
            .setSearchTextColorResource(R.color.my_color)
            .setSearchHintColorResource(R.color.my_color)
            .setSearchCloseIconResource(R.drawable.my_ic)
            .setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)
            .format(mSearchView);
 

15voto

prcaen Points 355

FYI maintenant avec le support ActionBar v7 appcompat la voie pour changer la couleur de conseil de requête, couleur de texte, taille de texte:

 import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.SearchAutoComplete;

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_home, menu);
    MenuItem searchItem = menu.findItem(R.id.item_search);
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    mSearchView.setOnQueryTextListener(this);
    mSearchView.setQueryHint(getString(R.string.text));
    SearchAutoComplete searchAutoComplete = (SearchAutoComplete) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(mRes.getColor(android.R.color.white));
    searchAutoComplete.setTextSize(14);

    return super.onCreateOptionsMenu(menu);
}
 

10voto

itsrajesh4uguys Points 2309

Veuillez regarder les exemples suivants.

http://www.edumobile.org/android/android-development/action-bar-search-view/

ci-dessus tutoriel est très bien.

Et aussi jeter un oeil à cette question ci-dessous

Android - Actionbar Sherlock - Filtre de recherche

1voto

alfred abalos Points 11

pour résoudre votre question numéro 2

changez cette ligne: .setShowAsAction (MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

à:

.setShowAsAction (MenuItem.SHOW_AS_ACTION_IF_ROOM);

utilisez uniquement le paramètre SHOW_AS_ACTION_IF_ROOM sur la méthode setSHowAsAction

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X