web-dev-qa-db-fra.com

Modification de la couleur du texte de la barre de recherche dans la recherche

Comment puis-je changer la couleur du texte de la vue de recherche de la barre d’action?

Cette question explique comment obtenir le EditText avec ABS: Android ActionBar Customize Search View

Existe-t-il un fichier Android.R.id que je pourrais utiliser pour obtenir une référence à EditText afin de pouvoir modifier la couleur de l'indice? Ou y a-t-il un autre moyen de changer la couleur?

Action bar search view hint text

48
Juhani

Android: actionBarWidgetTheme de votre thème principal doit pointer vers un style comportant un Android: textColorHint. Celui-ci permettra de changer la couleur du texte de la vue de recherche.

53
Kirill
searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.hintSearchMess) + "</font>"));
53
Vadim Teselkin
SearchView searchView= (SearchView) findViewById(R.id.searchView1);
int id = searchView.getContext()
                   .getResources()
                   .getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
22
Amr Angry

cela a fonctionné pour moi, espérons que cela aide

((EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.white));

voir aussi ceci

16
Syed Raza Mehdi

Je l'ai résolu en ajoutant cette propriété au thème principal:

<style name="AppTheme" parent="AppBaseTheme">
    .....
    .....
    <item name="Android:actionBarWidgetTheme">@style/MyActionBarWidgetTheme</item> 
</style>

Et ajoutez ensuite la propriété que je souhaite modifier dans ce cas, la couleur de l'indice.

<style name="MyActionBarWidgetTheme" parent="@Android:style/Theme.Holo">
    .....
    .....
    <item name="Android:textColorHint">@color/blanco_60</item>
</style>

J'espère que ça aide: D

11
Kokusho

Voici précisément comment vous appliquez le style évoqué ci-dessus. La bonne solution consiste à surcharger le style de widget de la barre d'action avec votre propre style personnalisé. Pour holo light avec barre d’action sombre, placez-le dans votre propre fichier de styles, tel que res/values/styles_mytheme.xml:

<style name="Theme.MyTheme" parent="@Android:style/Theme.Holo.Light.DarkActionBar">
    <item name="Android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item>
    <!-- your other custom styles -->
</style>

<style name="Theme.MyTheme.Widget" parent="@Android:style/Theme.Holo">
    <item name="Android:textColorHint">@Android:color/white</item>
    <!-- your other custom widget styles -->
</style>

Assurez-vous que votre application utilise un thème personnalisé tel que décrit dans entrez la description du lien ici

7
johnarleyburns

Un objet SearchView s'étend de LinearLayout, de sorte qu'il contient d'autres vues. L'astuce consiste à trouver la vue contenant le texte d'indice et à modifier la couleur par programmation. En parcourant la hiérarchie des vues, vous pouvez trouver le widget contenant le texte de conseil:

// get your SearchView with its id
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// traverse the view to the widget containing the hint text
LinearLayout ll = (LinearLayout)searchView.getChildAt(0);
LinearLayout ll2 = (LinearLayout)ll.getChildAt(2);
LinearLayout ll3 = (LinearLayout)ll2.getChildAt(1);
SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete)ll3.getChildAt(0);
// set the hint text color
autoComplete.setHintTextColor(getResources().getColor(Color.WHITE));

Cette méthode fonctionne avec n'importe quel thème. En outre, vous pouvez modifier l'aspect des autres widgets de la hiérarchie SearchView, tels que celui EditText contenant la requête de recherche.

7
jfcartier

Obtenez juste le textView id du widget de recherche et utilisez la méthode setTextColor() pour modifier la couleur du texte de recherche et setHintTextColor() pour modifier la couleur du texte des indications de recherche.

// Get textview id of search widget
int id =  searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);

// Set search text color
textView.setTextColor(Color.WHITE);

// Set search hints color
textView.setHintTextColor(Color.GRAY);
5
Ferdous Ahamed

Si vous souhaitez modifier le bouton de flèche gauche en mode recherche, ajoutez app: collapseIcon.

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="@color/colorPrimary"
        app:collapseIcon="@drawable/ic_search_view_home"
        />

Si vous souhaitez modifier la couleur du texte et la couleur de l'indication de texte, ajoutez ce qui suit.

EditText searchEditText = searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
    searchEditText.setTextColor(Color.WHITE);
    searchEditText.setHintTextColor(Color.WHITE);

Si vous souhaitez modifier l’icône de fermeture, ajoutez ce qui suit.

ImageView imvClose = searchView.findViewById(Android.support.v7.appcompat.R.id
            .search_close_btn);
    imvClose.setImageResource(R.drawable.ic_search_view_close);
5
Zin Myo Oo

Avec la bibliothèque appcompat la plus récente (ou si vous ciblez 5.0+), il est possible de le faire uniquement en XML en utilisant un ThemeOverlay:

<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="autoCompleteTextViewStyle">@style/Widget.MyApp.AutoCompleteTextView.SearchView</item>
</style>

<style name="Widget.MyApp.AutoCompleteTextView.SearchView" parent="Widget.AppCompat.AutoCompleteTextView">
    <item name="Android:textColor">#000</item>
    <item name="Android:textColorHint">#5000</item>
</style>

Et puis dans votre fichier de mise en page:

<Android.support.v7.widget.Toolbar
    app:theme="@style/ThemeOverlay.MyApp.ActionBar"
    ... />

Si vous souhaitez également qu'il s'applique aux activités qui utilisent un ActionBar au lieu d'un Toolbar, vous pouvez l'ajouter au thème de Activity:

<style name="Theme.MyApp" parent="Theme.AppCompat">
    <item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
    ...
</style>
3
Jarett Millard

Regardez dans cette classe, cela peut vous aider à résoudre votre problème

import Android.R.color;
import Android.content.Context;
import Android.graphics.Typeface;
import Android.widget.ImageView;

import com.actionbarsherlock.widget.SearchView;
import com.actionbarsherlock.widget.SearchView.SearchAutoComplete;

public class MySearchView {

    public static SearchView getSearchView(Context context, String strHint) {
        SearchView searchView = new SearchView(context);
        searchView.setQueryHint(strHint);
        searchView.setFocusable(true);
        searchView.setFocusableInTouchMode(true);
        searchView.requestFocus();
        searchView.requestFocusFromTouch();

        ImageView searchBtn = (ImageView) searchView.findViewById(R.id.abs__search_button);
        searchBtn.setImageResource(R.drawable.ic_menu_search);

        // ImageView searchBtnClose = (ImageView) searchView.findViewById(R.id.abs__search_close_btn);
        // searchBtnClose.setImageResource(R.drawable.ic_cancel_search_bar);


        SearchAutoComplete searchText = (SearchAutoComplete) searchView.findViewById(R.id.abs__search_src_text);
        setFont(context, searchText);
        searchText.setTextColor(context.getResources().getColor(color.white));
        searchText.setHintTextColor(context.getResources().getColor(color.white));

        return searchView;
    }

    private static void setFont(Context _context, SearchAutoComplete searchText) {
        Typeface tf = null;
        Typeface currentType = searchText.getTypeface();
        if (currentType == null) {
            tf = MyApplication.fontNormal;
        }
        else {
            int currentStyle = currentType.getStyle();
            if (currentStyle == Typeface.BOLD) {
                tf = MyApplication.fontBold;
            }
            else if (currentStyle == Typeface.BOLD_ITALIC) {
                tf = MyApplication.fontBoldItalic;
            }
            else if (currentStyle == Typeface.ITALIC) {
                tf = MyApplication.fontItalic;
            }
            else {
                tf = MyApplication.fontNormal;
            }
        }
        searchText.setTypeface(tf);
    }

    public static SearchView getSearchView(Context context, int strHintRes) {
        return getSearchView(context, context.getString(strHintRes));
    }
}
3
sonida

Essayez ce code. C'est très facile.

    // Associate searchable configuration with the SearchView
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        EditText searchEditText = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
           searchEditText.setHint("Search");
        searchEditText.setHintTextColor(getResources().getColor(R.color.white));
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

searchEditText.setHintTextColor (getResources (). getColor (R.color.white));

2
Jignesh Goyani

La solution pour changer la couleur du texte d'affichage de la vue de recherche est la suivante:

 SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
 searchAutoComplete.setHintTextColor(Color.GRAY);
2

En utilisant cela, vous pouvez changer le xml consultable

  1. Couleur du texte de recherche
  2. Rechercher du texte
  3. Rechercher fermer l'icône
  4. Icône Indice de recherche
  5. Plaque de recherche
int searchHintBtnId = searchView.getContext().getResources()
                    .getIdentifier("Android:id/search_mag_icon", null, null);
     int hintTextId = searchView.getContext()
                    .getResources()
                    .getIdentifier("Android:id/search_src_text", null, null);
            int closeBtnId = searchView.getContext()
                    .getResources()
                    .getIdentifier("Android:id/search_close_btn", null, null);
            // Set the search plate color to white
            int searchPlateId = getResources().getIdentifier("Android:id/search_plate", null, null);

            View view = searchView.findViewById(searchPlateId);
            view.setBackgroundResource(R.drawable.search_plate);

            ImageView closeIcon = (ImageView) searchView.findViewById(closeBtnId);
            closeIcon.setImageResource(R.drawable.close);

            ImageView searchHintIcon = (ImageView) searchView.findViewById(searchHintBtnId);
            searchHintIcon.setImageResource(R.drawable.search);

            TextView textView = (TextView) searchView.findViewById(hintTextId);
            textView.setTextColor(getResources().getColor(R.color.search_text_color));
            textView.setHintTextColor(getResources().getColor(R.color.search_hint_text_color));

Voici drawable/search_plate.xml

<!-- main color -->
<item Android:bottom="1dp"
    Android:left="1dp"
    Android:right="1dp">
    <shape >
        <solid Android:color="@color/app_theme_color" />
    </shape>
</item>

<!-- draw another block to cut-off the left and right bars -->
<item Android:bottom="10.0dp">
    <shape >
        <solid Android:color="@color/app_theme_color" />
    </shape>
</item> </layer-list>
2
Deepak Gupta

C'est très simple à réaliser avec le styles.xml Il suffit de comprendre que le thème de SearchView est directement lié au thème de la barre d’outils à partir duquel menu.xml il est récupéré comme un app:actionViewClass.

  1. Créez un style pour la barre d'outils.
  2. Appliquez ce style en tant que thème dans la barre d’outils pour modifier toutes les vues associées et leurs propriétés.
0
sud007

Vous pouvez également définir manuellement SearchView sur votre menuItem et ainsi avoir le plein contrôle de la vue.

0
Moritz
int id = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
textView.setHintTextColor(Color.WHITE);
0
Andrey Degtiarev