Changement de la barre d'action searchview indice de couleur du texte

Comment puis-je changer la couleur du texte de la barre d'action?

cette question explique comment obtenir le texte édité lors de l'utilisation de L'ABS: Android ActionBar Personnaliser La Vue De Recherche

est un androïde.R. id que je pourrais utiliser pour obtenir une référence à L'EditText pour que je puisse changer la couleur de l'indice? Ou est-il un autre moyen de changer la couleur?

Action bar search view hint text

36
demandé sur Community 2013-07-22 19:22:01

18 réponses

android:actionBarWidgetTheme de votre thème principal devrait pointer vers un style qui a un android:textColorHint dans elle. Celui-ci permettra de changer la couleur du texte de l'indice de la vue de recherche.

48
répondu Kirill 2013-07-22 15:29:58
searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.hintSearchMess) + "</font>"));
45
répondu Vadim Teselkin 2013-10-25 18:51:53
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);
19
répondu Amr Angry 2014-05-17 18:59:34

j'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 puis Ajouter la propriété que je veux changer dans ce cas la couleur indice.

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

Espère que cela aide :D

10
répondu Kokusho 2014-05-16 00:08:52

ça a marché pour moi, j'espère que ça va aider

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

Voir Aussi ce

10
répondu Syed Raza Mehdi 2017-05-23 10:31:29

Un SearchView objet s'étend à partir de LinearLayout , il est titulaire d'autres points de vue. Le truc est de trouver la vue contenant le texte de l'indice et de changer la couleur de façon programmatique. En parcourant la hiérarchie des vues, vous pouvez trouver le widget contenant le texte de l'indice:

// 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. De plus, vous pouvez changer l'apparence d'autres widgets dans la hiérarchie SearchView , comme le EditText contenant la requête de recherche.

7
répondu jfcartier 2014-03-11 04:05:49

Voici spécifiquement comment vous appliquez le style comme indiqué ci-dessus. La bonne réponse est de surcharger la barre d'action style widget avec votre propre style personnalisé. Pour holo light avec dark action bar, mettez cela dans votre propre fichier de styles tels 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 le thème thème personnalisé comme décrit dans entrez la description du lien ici

6
répondu johnarleyburns 2014-04-20 16:13:45

il suffit d'obtenir le textView id de widget de recherche et d'utiliser setTextColor() méthode pour changer la couleur du texte de recherche et setHintTextColor() pour changer la couleur du texte conseils 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);
4
répondu Ferdous Ahamed 2014-08-25 15:29:00

Regardez cette classe, elle 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
répondu sonida 2013-10-03 17:56:06

si vous voulez changer le bouton flèche gauche dans la vue de Recherche, Ajouter 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 voulez changer la couleur du texte et un indice de couleur, 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 voulez changer l'icône de fermeture, d'ajouter la suivante.

ImageView imvClose = searchView.findViewById(android.support.v7.appcompat.R.id
            .search_close_btn);
    imvClose.setImageResource(R.drawable.ic_search_view_close);
3
répondu Zin Myo Oo 2017-12-19 17:07:04

avec la bibliothèque appcompat la plus récente (ou si vous visez 5.0+), ceci est possible 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>

puis dans votre fichier de mise en page:

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

si vous voulez également qu'il s'applique aux activités qui utilisent un ActionBar au lieu d'un Toolbar , vous pouvez ajouter ceci au thème Activity :

<style name="Theme.MyApp" parent="Theme.AppCompat">
    <item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
    ...
</style>
2
répondu Jarett Millard 2016-03-22 18:59:50

vous pouvez également définir la vue de recherche sur votre menuItem manuellement et ainsi avoir le contrôle total sur la vue.

1
répondu Moritz 2013-07-22 15:58:31
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);
1
répondu Adegtiarev 2014-05-17 20:14:50

en utilisant ceci vous pouvez changer le xml de recherche

  1. indice de couleur du texte de recherche
  2. Recherche De Texte
  3. icône de recherche
  4. icône indice de recherche
  5. "151950920 de Recherche" plaque
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>
1
répondu Deepak Gupta 2015-09-01 11:13:10

essayez ce code. Il 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. de couleur.blanc));

1
répondu Jignesh Goyani 2016-05-13 10:13:52

la solution pour changer la couleur du texte indicateur de vue de recherche est:

 SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
 searchAutoComplete.setHintTextColor(Color.GRAY);
1
répondu Manvendra Priyadarshi 2016-06-06 05:40:23

c'est vraiment simple à réaliser en utilisant le styles.xml il suffit de comprendre que themeing le SearchView est directement lié au thème de la barre d'Outils dont menu.xml il est récupéré comme un app:actionViewClass .

  1. créer un style pour barre d'outils.
  2. appliquer ce style comme thème sur la barre d'outils et il change toutes les vues connexes et leurs propriétés.
1
répondu sud007 2017-09-23 02:35:38

mettez ceci dans votre fichier XML:

android:textColorHint="@android:color/white"
-2
répondu Faakhir 2016-04-15 21:17:42