Est-il possible de changer la couleur du texte sur Android SearchView?

L’élément SearchView ne possède aucune propriété pour modifier la couleur du texte. La couleur du texte par défaut est le noir et ne fonctionne pas sur notre fond sombre. Y a-t-il un moyen de changer la couleur du texte sans recourir à des hacks?

J’ai trouvé cette question similaire liée à la modification de la taille du texte, mais jusqu’à présent, il ne contient aucune réponse: Comment définir TextSize SearchView?

    Essayez quelque chose comme ceci: Vous obtiendrez un descripteur de textview à partir du SDK, puis vous le modifierez car ils ne l’exposent pas publiquement.

    int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) searchView.findViewById(id); textView.setTextColor(Color.WHITE); 

    Ajouter

     @android:color/white 

    au thème parent et cela devrait changer le texte saisi. Vous pouvez aussi utiliser

     @android:color/white 

    changer le texte de conseil pour le SearchView. (Notez que vous pouvez remplacer le @android:color/white avec la valeur appropriée que vous souhaitez utiliser)

    Cela fonctionne pour moi.

     SearchView searchView = (SearchView) findViewById(R.id.search); EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setTextColor(getResources().getColor(R.color.white)); searchEditText.setHintTextColor(getResources().getColor(R.color.white)); 

    Je voulais faire quelque chose de similaire. J’ai finalement dû trouver le TextView parmi les enfants SearchView :

     for (TextView textView : findChildrenByClass(searchView, TextView.class)) { textView.setTextColor(Color.WHITE); } 

    Si vous voulez la méthode util:

     public static  Collection findChildrenByClass(ViewGroup viewGroup, Class clazz) { return gatherChildrenByClass(viewGroup, clazz, new ArrayList()); } private static  Collection gatherChildrenByClass(ViewGroup viewGroup, Class clazz, Collection childrenFound) { for (int i = 0; i < viewGroup.getChildCount(); i++) { final View child = viewGroup.getChildAt(i); if (clazz.isAssignableFrom(child.getClass())) { childrenFound.add((V)child); } if (child instanceof ViewGroup) { gatherChildrenByClass((ViewGroup) child, clazz, childrenFound); } } return childrenFound; } 

    Ceci est mieux réalisé grâce à des styles personnalisés. Surchargez 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 :

       

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

    Pour moi les travaux suivants. J’ai utilisé un code provenant d’un lien: Modifier la couleur du texte de l’indicateur de recherche dans la barre d’actions à l’aide de la bibliothèque de support .

      searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); EditText txtSearch = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)); txtSearch.setHint(getResources().getSsortingng(R.ssortingng.search_hint)); txtSearch.setHintTextColor(Color.LTGRAY); txtSearch.setTextColor(Color.WHITE); 

    Modification de la barre d’action Il fonctionne mais ne définit que le texte et la couleur des indices.

      searchView.setQueryHint(Html.fromHtml("" + getResources().getSsortingng(R.ssortingng.search_hint) + "")); 

    Si vous utilisez android.support.v7.widget.SearchView, c’est possible sans avoir à utiliser la reflection.

    Voici comment je le fais dans mon application:

     EditText text = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); ImageView searchCloseIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); if (searchPlate != null) { searchPlate.setBackgroundResource(R.drawable.search_background); } if (text != null){ text.setTextColor(resources.getColor(R.color.white)); text.setHintTextColor(getResources().getColor(R.color.white)); SpannableSsortingngBuilder magHint = new SpannableSsortingngBuilder(" "); magHint.append(resources.getSsortingng(R.ssortingng.search)); Drawable searchIcon = getResources().getDrawable(R.drawable.ic_action_view_search); int textSize = (int) (text.getTextSize() * 1.5); searchIcon.setBounds(0, 0, textSize, textSize); magHint.setSpan(new ImageSpan(searchIcon), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Set the new hint text text.setHint(magHint); } if (searchCloseIcon != null){ searchCloseIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_close)); } 

    Ils n’exposent pas publiquement les identifiants pour SearchView non appcompat, mais ils le font pour AppCompat si vous savez où chercher. 🙂

    Vous pouvez le faire en définissant l’atsortingbut editTextColor dans le style.

      

    et vous appliquez ce style à la Toolbar d’ Toolbar ou à SearchView dans la présentation.

        

    si vous utilisez – android.support.v7.widget.SearchView

     SearchView searchView = (SearchView) item.getActionView(); EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); editText.setTextColor(Color.WHITE); 

    J’ai eu ce problème, et cela fonctionne pour moi.

     @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.customer_menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_customer_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setOnQueryTextListener(this); //Applies white color on searchview text int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) searchView.findViewById(id); textView.setTextColor(Color.WHITE); return true; } 

    Si vous basez le thème de votre application sur le thème holo, vous obtiendrez un texte blanc au lieu d’un texte noir dans votre SearchView.

    Je n'ai trouvé aucun autre moyen de changer la couleur du texte de la vue de recherche sans utiliser de piratage sale.

    Utilisez celui-ci, c’est vrai. :RÉ

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

    Cela fonctionne pour moi.

     final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener(this); searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setTextColor(getResources().getColor(R.color.white)); searchEditText.setHintTextColor(getResources().getColor(R.color.white)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { searchEditText.setBackgroundColor(getResources().getColor(R.color.c_trasnparent)); searchEditText.setGravity(Gravity.CENTER); searchEditText.setCompoundDrawables(null,null,R.drawable.ic_cross,null); } 

    Oui c’est possible en utilisant la méthode suivante.

     public static EditText setHintEditText(EditText argEditText, Ssortingng argHintMessage, boolean argIsRequire) { try { if (argIsRequire) { argHintMessage = " " + argHintMessage; //Ssortingng text = ""+argHintMessage+" *"; Ssortingng text = "" + argHintMessage + ""; argEditText.setHint(Html.fromHtml(text)); } else { argEditText.setHint(argHintMessage); } } catch (Exception e) { e.printStackTrace(); } return argEditText; } 

    L’appel de cette méthode ressemble à ceci ..

     metLoginUserName=(EditText)this.findViewById(R.id.etLoginUserName); metLoginPassword=(EditText)this.findViewById(R.id.etLoginPassword); /**Set the hint in username and password edittext*/ metLoginUserName=HotSpotStaticMethod.setHintEditText(metLoginUserName, getSsortingng(R.ssortingng.hint_username),true); metLoginPassword=HotSpotStaticMethod.setHintEditText(metLoginPassword, getSsortingng(R.ssortingng.hint_password),true); 

    en l’utilisant, j’ai ajouté avec succès une marque de couleur rouge * en utilisant cette méthode. Vous devez changer cette méthode en fonction de vos besoins. J’espère que c’est utile pour vous …. 🙂

    Oui nous pouvons,

     SearchView searchView = (SearchView) findViewById(R.id.sv_symbol); 

    Pour appliquer la couleur blanche au texte SerachView,

     int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) searchView.findViewById(id); textView.setTextColor(Color.WHITE); 

    Heureux codage !!!!

    Créer un style pour votre Toolbar

      

    Et définissez-le comme thème de la Toolbar

      

    Changer la couleur du texte saisi:

     ((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setTextColor(Color.WHITE); 

    Changer la couleur du texte de conseil:

     ((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setHintTextColor(Color.LTGRAY); 

    Un object SearchView s’étend de LinearLayout , il contient donc d’autres vues. L’astuce consiste à trouver la vue contenant le texte de conseil et à modifier la couleur par programmation. Le problème avec la recherche de la vue par ID est que l’identifiant dépend du thème utilisé dans l’application. Ainsi, en fonction du thème utilisé, la findViewById(int id) peut renvoyer null . Une meilleure approche qui fonctionne avec chaque thème consiste à parcourir la hiérarchie des vues et à 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)); // set the text color autoComplete.setTextColor(Color.BLUE); 

    En utilisant cette méthode, vous pouvez également modifier l’apparence d’autres widgets dans la hiérarchie SearchView , tels que le EditText contenant la requête de recherche. À moins que Google ne décide de modifier SearchView hiérarchie des vues d’une SearchView , vous devriez pouvoir modifier l’apparence du widget avec cette méthode pendant un certain temps.

    Il est possible de personnaliser searchview en utilisant la bibliothèque appcompat v7. J’ai utilisé la bibliothèque appcompat v7 et défini un style personnalisé pour celle-ci. Dans le dossier pouvant être dessiné, placez le fichier bottom_border.xml qui ressemble à ceci:

                         

    Dans le dossier de valeurs styles_myactionbartheme.xml:

              

    J’ai défini le fichier custommenu.xml pour afficher le menu:

         

    Votre activité doit étendre ActionBarActivity au lieu de Activity. Voici la méthode onCreateOptionsMenu.

      @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.custommenu, menu); } 

    Dans un fichier manifeste:

       

    Pour plus d’informations, voir cette URL:
    Ici http://www.jayway.com/2014/06/02/android-theming-the-actionbar/

    pour appcompat-v7 Toolbar with searchView (fourni via MenuItemCompat):

    Si vous définissez le thème de la barre d’outils sur @ style / ThemeOverlay.AppCompat.Light, les couleurs foncées (noir) du texte de conseil et du texte saisi seront affectées, mais elles n’affecteront pas la couleur du curseur *. Par conséquent, en définissant le thème de la barre d’outils sur @ style / ThemeOverlay.AppCompat.Dark, vous obtiendrez une couleur claire (blanc) pour le texte de conseil et le texte saisi. De toute façon, le curseur * sera blanc.

    Personnalisation des thèmes ci-dessus:

    android: textColorPrimary -> couleur du texte saisi

    editTextColor -> couleur du texte saisi (remplacera l’effet d’android: textColorPrimary si défini)

    android: textColorHint -> couleur de l’indice

    * note: Je n’ai pas encore déterminé comment contrôler la couleur du curseur (sans utiliser la solution de reflection).

    En utilisant ceci j’ai pu changer le texte en couleur tapé dans la vue de recherche

     AutoCompleteTextView typed_text = (AutoCompleteTextView) inputSearch.findViewById(inputSearch.getContext().getResources().getIdentifier("android:id/search_src_text", null, null)); typed_text.setTextColor(Color.WHITE); 

    Sensationnel. Beaucoup de réponse. Il obtient la valeur de couleur de votre couleur primaire.

    Changez-le et c’est fait!

     @Override public void onResume() { super.onResume(); getActivity().setTheme(R.style.YourTheme_Searching); } 

    Modes;

      

    Le moyen le plus propre est:

    La barre d’outils utilise le thème ThemeOverlay.AppCompat.Dark.Actionbar.

    Maintenant, fais en un enfant comme:

    toolbarStyle parent “ThemeOverlay.AppCompat.Dark.Actionbar”

    append cet article dans ce style

    nom de l’élément “android: editTextColor”> yourcolor

    Terminé.

    Une autre chose très importante est que, dans la barre d’outils, placez le layout_height = “? Attr / actionbarSize”. Par défaut, il s’agit de wrap_content.Pour moi, le texte n’était même pas visible dans la vue de recherche, il a résolu ce problème.

     searchView = (SearchView) view.findViewById(R.id.searchView); SearchView.SearchAutoComplete searchText = (SearchView.SearchAutoComplete) searchView .findViewById(org.holoeverywhere.R.id.search_src_text); searchText.setTextColor(Color.BLACK); 

    J’utilise la bibliothèque Holoeverywhere. Notez le org.holoeverywhere.R.id.search_src_text

     TextView textView = (TextView) searchView.findViewById(R.id.search_src_text); textView.setTextColor(Color.BLACK); 

    J’ai trouvé une solution à partir d’un article de blog. Voir ici

    Fondamentalement, vous personnalisez searchViewAutoCompleteTextView et vous avez Android: actionBarWidgetTheme hérite du style.

    ça marche avec moi

     @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem searchItem = menu.findItem(R.id.action_search); EditText searchEditText = (EditText) searchView.getActionView().findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setTextColor(getResources().getColor(R.color.white)); searchEditText.setHintTextColor(getResources().getColor(R.color.white)); return super.onPrepareOptionsMenu(menu); } 

    Qu’est-ce qui a fonctionné pour moi

     ((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text)); 

    J’ai essayé de trouver une solution pour cela. Je pense que ça va t’aider ..

     searchView.setBackgroundColor(Color.WHITE); 

    entrer la description de l'image ici

    Vous pouvez implémenter comme cette classe pour changer la couleur de police et l’image:

     import com.actionbarsherlock.widget.SearchView; import com.actionbarsherlock.widget.SearchView.SearchAutoComplete; public class MySearchView { public static SearchView getSearchView(Context context, Ssortingng 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); searchText.setTextColor(context.getResources().getColor(color.white)); return searchView; } public static SearchView getSearchView(Context context, int strHintRes) { return getSearchView(context, context.getSsortingng(strHintRes)); } } 

    J’espère que cela peut vous aider les gars. :RÉ