如何在深色背景的ActionBarSherlock内更改搜索视图的自动完成文本颜色?

时间:2013-02-21 17:35:00

标签: android colors actionbarsherlock android-theme autocompletetextview

基于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);

这有很大帮助,但我无法更改自动填充文本的颜色:

enter image description here

如你所见,它仍然是黑色的。如何为这种文本设置白色文本颜色?

6 个答案:

答案 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);

这是屏幕

enter image description here

答案 5 :(得分:1)

问题是SearchView在未正确考虑设置的ActionBar样式(在本例中为Light ActionBar on Light)的情况下进行了初始化。答案是使用ActionBar主题Context;由Activity.getActionBar().getThemedContext()检索。这在ABS Migration

的底部提到
  

如果您正在使用列表导航,请特别注意演示示例中的“列表导航”示例,以获取正确使用方向。您需要为项目视图和下拉视图使用库提供的布局,以及使用操作栏中的主题上下文。

我的代码是如何在标准Android中完成的,您必须得到ActionBar但是合适。如果您将主题Context传递给SearchView,那么它将使用相应的样式,即它不会呈现自己,就好像它在浅色背景上一样。