4

我有自己的 ActionBarSherlock 主题Theme.Sherlock.Light.DarkActionBar,这是我的风格:

<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_barxml在哪里:

<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 中使用搜索模式时)是“黑暗中的黑暗”,所以我什么都看不到。我尝试手动设置 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);

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

在此处输入图像描述

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

4

6 回答 6

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

它来自我自己的回答如何设置 SearchView TextSize?

于 2013-02-26T07:15:18.673 回答
2

我通过禁用自动完成功能解决了这个问题(如果您将编辑类型设置为可见密码,它将被禁用),但这个解决方案不是很好,我仍在寻找更好的解决方案。

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;
}
于 2013-02-27T09:48:14.823 回答
1

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

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

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

于 2014-02-27T02:58:15.220 回答
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);

这是屏幕

在此处输入图像描述

于 2013-03-04T06:11:47.290 回答
1

可能有最好的方法来做到这一点,但是使用了非常简单的方法,我为此使用了

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        searchMenuItem = CollapsibleMenuUtils.addSearchMenuItem(menu, false,
                textWatcher);
        return true;
    }

设置布尔值 true/false 以设置 Light/Dark 主题

addSearchMenuItem(Menu menu, boolean isLightTheme, TextWatcher textWatcher)

将可折叠的搜索菜单项添加到菜单中。

参数:menu isLightTheme - 如果对 ActionBar 使用灯光,则为 true,否则为 false textWatcher

为了更改文本颜色,我更改了库的布局/ holodark.xml

<AutoCompleteTextView
        android:id="@+id/search_src_text"
        android:layout_width="0dp"
       .
       .
        android:textColor="@android:color/white" />
于 2013-02-28T10:57:01.937 回答
1

我认为您正在使用带有自定义深色操作栏主题的浅色主题。您可以尝试将主题更改为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 库的一些修复中发现了它。

于 2013-02-21T20:29:02.440 回答