基于Theme.Sherlock.Light.DarkActionBar
,我有自己的ActionBarSherlock主题,这是我的风格:
<style name="Theme.MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
<item name="actionBarStyle">@style/Widget.MyTheme.ActionBar</item>
</style>
<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="android:background">@drawable/action_bar</item>
<item name="background">@drawable/action_bar</item>
</style>
@drawable/action_bar
是xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<solid android:color="@color/color_action_bar_bottom_line" />
</shape>
</item>
<item android:bottom="2dp">
<shape android:shape="rectangle">
<solid android:color="@color/color_action_bar_background" />
</shape>
</item>
</layer-list>
除了一件事之外,一切看起来都很棒:SearchView中的文字(当我在ActionBar中使用搜索模式时)是#34;黑暗和#34;,所以我看不到任何东西。我尝试手动设置SearchView的文本颜色:
AutoCompleteTextView searchTextView =
(AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchTextView.setTextColor(Color.WHITE);
searchTextView.setHintTextColor(Color.LTGRAY);
searchTextView.setHighlightColor(Color.WHITE);
searchTextView.setLinkTextColor(Color.WHITE);
这有很大帮助,但我无法更改自动填充文本的颜色:
如你所见,它仍然是黑色的。如何为这种文本设置白色文本颜色?
答案 0 :(得分:3)
试试此代码
SearchView searchView = new SearchView(context);
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);
或
SearchView searchView = new SearchView(context);
AutoCompleteTextView search_text = (AutoCompleteTextView) searchView.findViewById(searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null));
search_text.setTextColor(Color.WHITE);
这是我自己的回答How to set SearchView TextSize?
答案 1 :(得分:2)
我通过禁用自动完成功能解决了这个问题(如果你将编辑类型设置为Visible Password,它将被禁用),但是这个解决方案不是很好,我仍在寻找更好的解决方案。
private SearchView getSearchView() {
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
searchView.setQueryHint("Search for items");
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
AutoCompleteTextView searchTextView =
(AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
if (searchTextView != null) {
searchTextView.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
searchTextView.setTypeface(Typeface.DEFAULT);
}
return searchView;
}
答案 2 :(得分:1)
我认为你正在使用一个带有自定义暗动作条主题的Light Theme。您可以尝试将AutoCompleteTextView
的主题更改为黑暗主题。尝试在主题中添加:
<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="android:searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="searchAutoCompleteTextViewStyle">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="android:searchAutoCompleteTextViewStyle">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="textAppearanceLargePopupMenu">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="android:textAppearanceLargePopupMenu">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="textAppearanceSmallPopupMenu">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
<item name="android:textAppearanceSmallPopupMenu">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
</style>
编辑:不确定添加的行,但您可以尝试。我在HoloEverywhere library.
的一些修正中发现了它答案 3 :(得分:1)
可能有最佳方法可以做到这一点,但是使用了非常简单的方法,我使用了library
@Override
public boolean onCreateOptionsMenu(Menu menu) {
searchMenuItem = CollapsibleMenuUtils.addSearchMenuItem(menu, false,
textWatcher);
return true;
}
为设置Light / Dark主题
设置true / false的布尔值addSearchMenuItem(菜单菜单,boolean isLightTheme,TextWatcher textWatcher)
将可折叠搜索菜单项添加到菜单中。
参数:menu isLightTheme - 如果使用它们为ActionBar点亮它们为true, 否则为false textWatcher
更改文本颜色我更改了librery的layout / holodark.xml
<AutoCompleteTextView
android:id="@+id/search_src_text"
android:layout_width="0dp"
.
.
android:textColor="@android:color/white" />
答案 4 :(得分:1)
在这里我使用像这样的SearchView,它的白色也是很好的搜索文本颜色。
这一个res/menu
,名称为applications_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/Accounts"
android:icon="@drawable/ic_launcher">
</item>
<item
android:id="@+id/menu_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom"
android:title="menu_search">
</item>
</menu>
当你像这样搜索时,这个用于活动
new MenuInflater(this).inflate(R.menu.applications_menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
这是屏幕
答案 5 :(得分:1)
问题是SearchView
在未正确考虑设置的ActionBar
样式(在本例中为Light ActionBar on Light)的情况下进行了初始化。答案是使用ActionBar
主题Context
;由Activity.getActionBar().getThemedContext()
检索。这在ABS Migration:
如果您正在使用列表导航,请特别注意演示示例中的“列表导航”示例,以获取正确使用方向。您需要为项目视图和下拉视图使用库提供的布局,以及使用操作栏中的主题上下文。
我的代码是如何在标准Android中完成的,您必须得到ActionBar
但是合适。如果您将主题Context
传递给SearchView
,那么它将使用相应的样式,即它不会呈现自己,就好像它在浅色背景上一样。