繁体   English   中英

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

[英]How to change the autocomplete text color for search view inside of ActionBarSherlock with dark background?

我有自己的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_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中使用搜索模式时)是“黑暗的黑暗”,所以我看不到任何东西。 我尝试手动设置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);

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

在此输入图像描述

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

试试这个代码

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?

我通过禁用自动完成功能解决了这个问题(如果你将编辑类型设置为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;
}

我认为你正在使用一个带有自定义暗动作条主题的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库的一些修复中发现了它

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

 @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" />

在这里我使用像这样的SearchView它也是白色的工作很好的searchtext颜色。

这个res/menu和name是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);

这是屏幕

在此输入图像描述

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM