有人知道如何更改appcompat SearchView的文字颜色吗?我花了2个小时从SO那里尝试了几个建议,但都没有。
这是我的代码:
<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>
在我的活动中,我有这个:
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);
}
答案 0 :(得分:41)
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
答案 1 :(得分:8)
SearchView
对象从LinearLayout
延伸,因此它包含其他视图。诀窍是找到包含提示文本的视图并以编程方式更改颜色。通过遍历视图层次结构,您可以找到包含提示文本的小部件:
// 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);
此方法适用于任何主题。此外,您可以更改SearchView
层次结构中其他小部件的外观,例如保存搜索查询的EditText
。
答案 2 :(得分:8)
这些答案都不适合我。最终工作的是在工具栏上设置主题并在那里指定textColorHint。
主题(在styles.xml中):
<style name="ToolbarTheme">
<item name="android:textColorHint">@color/white_opacity_60</item>
</style>
工具栏(在任何布局中):
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ToolbarTheme" />
这是有效的,因为当您将主题设置为ViewGroup时,其属性也会应用于ViewGroup的所有子视图。这是主题和风格之间的差异之一:)
答案 3 :(得分:3)
可以使用appcompat v7库自定义searchview。我使用了appcompat v7库并为其定义了自定义样式。 在drawable文件夹中放入bottom_border.xml文件,如下所示:
<?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>
在值文件夹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>
我定义了custommenu.xml文件以显示菜单:
<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>
您的活动应该扩展ActionBarActivity而不是Activity。 这是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);
}
在清单文件中:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppnewTheme" >
有关详细信息,请参阅此网址:
这里http://www.jayway.com/2014/06/02/android-theming-the-actionbar/
答案 4 :(得分:1)
提示颜色:
fun SearchView.setHintTextColor(@ColorInt color: Int) {
findViewById<EditText>(R.id.search_src_text).setHintTextColor(color)
}
查询颜色:
fun SearchView.setTextColor(@ColorInt color: Int) {
findViewById<EditText>(R.id.search_src_text).setTextColor(color)
}
答案 5 :(得分:0)
在Appcompat v21中更改SearchView的样式
1)创建一个可配置的配置文件。此文件传统上命名为searchable.xml,必须保存在res / xml / project目录中。
<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>
2)将元数据和属性添加到您的活动和操作以在AndroidManifest.xml中进行intent-filter
<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>
3)为指标,图标,提示和文字颜色创建样式。
<style name="Theme.App.Base" parent="Theme">
name="searchViewStyle">@style/Widget.App.SearchView</item>
</style>
4)将Widget.App.Search添加到AndroidManifest中添加的BaseAppTheme作为活动样式
<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"/>
将ActionBarThemeOverlay添加到工具栏初始化
{{1}}
答案 6 :(得分:0)
另一种解决方案:
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));
答案 7 :(得分:0)
看看这个: Link
这对我很有用:
Android.Widget.SearchView searchView = (Android.Widget.SearchView)FindViewById(Resource.Id.TxtSearchMaterial);
LinearLayout linearLayout1 = (LinearLayout)searchView.GetChildAt(0);
LinearLayout linearLayout2 = (LinearLayout)linearLayout1.GetChildAt(2);
LinearLayout linearLayout3 = (LinearLayout)linearLayout2.GetChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView)linearLayout3.GetChildAt(0);
autoComplete.SetTextColor(Color.White);