Est-ce que quelqu'un sait comment changer la couleur du texte de l'appViewViewView? J'ai passé 2 heures et essayé plusieurs suggestions de SO et aucune ne fonctionne.
Voici mon code:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:espacios="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/layer_switcher_button"
Android:icon="@drawable/b_categorias"
Android:title="@string/menu_layer_switcher_title"
espacios:showAsAction="ifRoom|collapseActionView"/>
<item
Android:id="@+id/action_search"
Android:icon="@drawable/b_buscar"
Android:title="@string/menu_search_title"
espacios:actionViewClass="Android.support.v7.widget.SearchView"
espacios:showAsAction="ifRoom|collapseActionView"/>
</menu>
Et dans mon activité, j'ai ceci:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
menuItem layerSwitcher = menu.findItem(R.id.layer_switcher_button);
layerSwitcher.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
onLayerSwitcherButtonClicked();
return false;
}
});
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
LinearLayout ll = (LinearLayout) searchView.getChildAt(0);
TextView textView = (TextView) ll.getChildAt(0);
textView.setTextColor(R.color.white);
}
SearchView searchView = new SearchView(getContext());
SearchView.SearchAutoComplete theTextArea = (SearchView.SearchAutoComplete)searchView.findViewById(R.id.search_src_text);
theTextArea.setTextColor(Color.WHITE);//or any color that you want
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));
// set the text color
autoComplete.setTextColor(Color.BLUE);
Cette méthode fonctionne avec n'importe quel thème. En outre, vous pouvez modifier l'aspect des autres widgets dans la hiérarchie SearchView
, tels que le EditText
contenant la requête de recherche.
Aucune des réponses n'a fonctionné pour moi. Ce qui a finalement fonctionné a été de définir un thème dans la barre d’outils et d’y spécifier textColorHint.
Thème (dans styles.xml):
<style name="ToolbarTheme">
<item name="Android:textColorHint">@color/white_opacity_60</item>
</style>
Barre d'outils (dans n'importe quelle mise en page) :
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ToolbarTheme" />
Cela fonctionne car lorsque vous définissez un thème dans un groupe de vues, ses attributs sont également appliqués à toutes les vues enfant du groupe de vues. C'est l'une des différences entre un thème et un style :)
Il est possible de personnaliser searchview à l'aide de la bibliothèque appcompat v7. J'ai utilisé la bibliothèque appcompat v7 et défini un style personnalisé pour elle . Dans le dossier drawable, mettez le fichier bottom_border.xml qui ressemble à ceci:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape >
<solid Android:color="@color/blue_color" />
</shape>
</item>
<item Android:bottom="0.8dp"
Android:left="0.8dp"
Android:right="0.8dp">
<shape >
<solid Android:color="@color/background_color" />
</shape>
</item>
<!-- draw another block to cut-off the left and right bars -->
<item Android:bottom="2.0dp">
<shape >
<solid Android:color="@color/main_accent" />
</shape>
</item>
</layer-list>
Dans le dossier de valeurs styles_myactionbartheme.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppnewTheme" parent="Theme.AppCompat.Light">
<item name="Android:windowBackground">@color/background</item>
<item name="Android:actionBarStyle">@style/ActionBar</item>
<item name="Android:actionBarWidgetTheme">@style/ActionBarWidget</item>
</style>
<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="Android:background">@color/main_accent</item>
<!-- <item name="Android:icon">@drawable/abc_ic_ab_back_holo_light</item> -->
</style>
<style name="ActionBarWidget" parent="Theme.AppCompat.Light">
<!-- SearchView customization-->
<!-- Changing the small search icon when the view is expanded -->
<!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> -->
<!-- Changing the cross icon to erase typed text -->
<!-- <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> -->
<!-- Styling the background of the text field, i.e. blue bracket -->
<item name="searchViewTextField">@drawable/bottom_border</item>
<!-- Styling the text view that displays the typed text query -->
<item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item>
</style>
<style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
<item name="Android:textColor">@color/text_color</item>
<!-- <item name="Android:textCursorDrawable">@null</item> -->
<!-- <item name="Android:textColorHighlight">@color/search_view_selected_text</item> -->
</style>
</resources>
J'ai défini le fichier custommenu.xml pour l'affichage du menu:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:com.example.actionbartheme="http://schemas.Android.com/apk/res-auto" >
<item Android:id="@+id/search"
Android:title="@string/search_title"
Android:icon="@drawable/search_buttonn"
com.example.actionbartheme:showAsAction="ifRoom|collapseActionView"
com.example.actionbartheme:actionViewClass="Android.support.v7.widget.SearchView"/>
</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 le fichier manifeste:
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppnewTheme" >
Pour plus d'informations, voir cette URL:
Here http://www.jayway.com/2014/06/02/Android-theming-the-actionbar/
Une autre solution:
searchView_SA = (SearchView) findViewById(R.id.searcvViewSA);
EditText searchEditText = (EditText)searchView_SA.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.black));
searchEditText.setHintTextColor(getResources().getColor(R.color.black));
Changer le style de SearchView dans Appcompat v21
1) Créez un fichier de configuration accessible. Ce fichier s'appelle traditionnellement searchable.xml et doit être enregistré dans le répertoire res/xml/project.
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:label="@string/app_label"
Android:hint="@string/search_hint" >
</searchable>
2) Ajoutez des métadonnées et des attributs à votre activité et à votre action pour filtrer intentionnellement dans AndroidManifest.xml
<activity
Android:name=".activity.YourActivity"
Android:screenOrientation="portrait"
Android:theme="@style/Theme.App.Base">
<meta-data Android:name="Android.app.searchable"
Android:resource="@xml/searchable"/>
<intent-filter>
<action Android:name="Android.intent.action.SEARCH" />
<category Android:name="Android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
3) Créez des styles pour les indicateurs, les icônes, les indices et les couleurs du texte.
<style name="ActionBarThemeOverlay" parent="">
<item name="Android:textColorPrimary">@color/action_bar_text</item>
<item name="colorControlNormal">@color/action_bar_text</item>
<item name="colorControlHighlight">@color/body_text_2</item>
</style>
<style name="Widget.App.SearchView" parent="Widget.AppCompat.Light.SearchView">
<item name="closeIcon">@drawable/ic_action_cancel</item>
<item name="voiceIcon">@drawable/ic_action_voice</item>
</style>
4) Ajouter Widget.App.Search à BaseAppTheme ajouté dans AndroidManifest en tant que style d'activité
<style name="Theme.App.Base" parent="Theme">
name="searchViewStyle">@style/Widget.App.SearchView</item>
</style>
Ajouter ActionBarThemeOverlay à votre initalisation de la barre d’outils
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar_actionbar"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="@dimen/toolbar_height"
Android:background="@color/color_primary"
app:theme="@style/ActionBarThemeOverlay"
app:popupTheme="@style/ActionBarPopupThemeOverlay"
app:subtitleTextAppearance="@style/Theme.ActionBar.SubtitleTextStyle"
app:titleTextAppearance="@style/Theme.ActionBar.TitleTextStyle"/>