web-dev-qa-db-fra.com

Personnalisation Android SearchView

je suis nouveau sur Android et je me suis retrouvé coincé dans un projet que je trouve simple, mais qui me laisse perplexe. Le problème est que je ne sais pas trop comment personnaliser l’arrière-plan, la couleur d’entrée de texte, la couleur de l’icône de recherche en XML ou tout simplement leurs attributs. Pour le moment, je suis sur mon téléphone et je ne peux pas montrer mon code. Est-ce que quelqu'un me dit comment je peux le personnaliser? Peut-être me montrer un tutoriel que je peux suivre? Merci d'avance !!!!

4
user5807086

Je vous suggère de regarder la réponse que j'ai donnée ici pour créer votre propre SearchBar.

Je n'arrive pas à comprendre la raison, mais je ne peux pas nommer la barre de recherche par défaut de Google. J'ai donc dû créer ma propre barre de recherche.

Voici comment j'ai fait:

Styling Search Voir sur Android (min21)

Si vous souhaitez implémenter un algorithme InstantSearch suivez ce grand auteur et son projet (regardez la réponse acceptée):

Comment filtrer un RecyclerView avec un SearchView

Si vous avez besoin d’aide supplémentaire, laissez un commentaire. Si la réponse vous a aidé à relire aussi ma réponse: P

UPDATE: Voici la mise en oeuvre par Google de la vue Recherche, pour vous donner plus d'informations: https://developer.Android.com/guide/topics/search/search-dialog.html

Bonne journée :)

2
Cesarsk

Ajoutez ce code sur votre RelativeLayout

<Android.support.v7.widget.SearchView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@color/colorAsh"
        Android:backgroundTint="@color/colorAsh"
        Android:searchIcon="@drawable/ic_search"
        Android:commitIcon="@drawable/ic_commit"
        Android:searchHintIcon="@drawable/ic_search" 
        Android:closeIcon="@drawable/ic_close" 
        Android:goIcon="@drawable/ic_go">

    </Android.support.v7.widget.SearchView>

N'oubliez pas de changer ces icônes.

Et suivez ceci SearchView pour connaître chaque option de SearchView

5
AGM Tazim

faites juste votre propre recherche, c’est très simple. 

custom_searchview.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="horizontal" Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:paddingLeft="8dp"
    Android:paddingRight="8dp"
    Android:paddingTop="4dp"
    Android:paddingBottom="4dp"
    Android:gravity="center_vertical">

    <ImageView
        Android:layout_width="20dp"
        Android:layout_height="20dp"
        Android:adjustViewBounds="true"
        Android:src="@drawable/ic_search_white"/>

    <EditText
        Android:id="@+id/edt_search_text"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:inputType="text"
        Android:imeOptions="actionSearch"
        Android:hint="@string/by_name"
        Android:paddingLeft="8dp"
        Android:paddingRight="8dp"
        Android:lines="1"
        Android:textColorHint="@color/colorTextGrey"
        Android:textColor="@color/white"
        Android:textSize="14sp"
        Android:background="@Android:color/transparent"/>

    <ImageView
        Android:id="@+id/iv_clear_text"
        Android:layout_width="25dp"
        Android:layout_height="25dp"
        Android:adjustViewBounds="true"
        Android:visibility="gone"
        Android:src="@drawable/ic_clear"/>

</LinearLayout>

vous pouvez ensuite inclure cette mise en page dans votre fichier de mise en forme d'activité. Ceci est une mise en page simple qui comprend une "icône de recherche" suivie de EditText, suivie de "icône vide". L'icône en clair apparaît après que l'utilisateur a tapé du texte. 

puis dans votre activité, vous devez écouter lorsque l'utilisateur clique sur la recherche sur le clavier et également écouter lorsque l'utilisateur saisit du texte pour afficher "icône vide"

    /*search btn clicked*/
    edtSearchText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                performSearch();
                return true;
            }
            return false;
        }
    });

    /*hide/show clear button in search view*/
    edtSearchText.addTextChangedListener(searchViewTextWatcher);


TextWatcher searchViewTextWatcher = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        if(s.toString().trim().length()==0){
            ivClearText.setVisibility(View.GONE);
        } else {
            ivClearText.setVisibility(View.VISIBLE);
        }


    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                                  int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }
};
1
Mikhail Kim