4

我已經基於Theme.Sherlock.Light.DarkActionBar我自己的主題ActionBarSherlock,這裏是我的風格:如何在深色背景下更改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> 

一切看起來,除了一兩件事極大:在搜索查看文本(當我在ActionBar中使用搜索模式時)是「黑暗黑暗」,所以我什麼也看不見。我試圖設置文本顏色爲手動搜索查看:

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

正如你看到的,它仍然是黑色的。如何爲這種文本設置白色文本顏色?

回答

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; 
} 
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 library.

+0

這沒有幫助。自動填充文字仍然是黑色的。我看了一下ActionBarSherlock的例子,他們的標準例子'SearchView'也有同樣的問題。 – Andrew 2013-02-22 09:48:41

+0

我使用https://github.com/ChristopheVersieux/HoloEverywhere/commit/b839f5df0cef9a093aaac0992abcb8e8d33cf011 – buzeeg 2013-02-26 19:28:01

+0

中的信息編輯我的答案Android找不到「searchAutoCompleteTextViewStyle」和「android:searchAutoCompleteTextViewStyle」屬性。我可以在哪裏找到它們?我有ActionBarSherlock 4.2.0,targetSDK:'17',minSDK:'8'如果我在代碼中註釋它們,我有同樣的情況,編輯器的文本顏色是白色,但自動填充建議是黑色的。 – Andrew 2013-02-27 09:12:04

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?

+0

第一種解決方案與我自己的相同:文本顏色爲白色,但自動填充的「文本鏈接」爲黑色。第二個是空引用異常。 – Andrew 2013-02-26 07:34:59

1

可能還有就是要做到這一點最好的方法,但所用的方式很簡單,我用library

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

設置布爾值真/假設置亮/暗主題

addSearchMenuItem(菜單菜單,布爾isLightTheme,TextWatcher textWatcher)

將可摺疊搜索菜單項添加到菜單中。

參數:菜單isLightTheme - 如果利用光他們的ActionBar, 否則爲假textWatcher

改變文字顏色我改變了librery的佈局/ holodark。XML

<AutoCompleteTextView 
     android:id="@+id/search_src_text" 
     android:layout_width="0dp" 
     . 
     . 
     android:textColor="@android:color/white" /> 
1

這裏IAM期運用搜索查看這個樣子也不錯的工作顏色SEARCHTEXT以白色爲主色調。

這一個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

+0

只有在Android 3.0或以上版本纔有意思。 – 2014-03-25 17:11:30

1

的問題是那SearchView初始化時沒有正確考慮設置的ActionBar風格(在這種情況下,Light Action Light on Light)。答案是使用ActionBar主題Context;通過Activity.getActionBar().getThemedContext()檢索。這是在ABS Migration的底部所提及:

如果您正在使用列表導航要特別關注「列表導航」例如演示樣本中正確使用方向。您需要使用庫提供的項目視圖和下拉視圖佈局,以及使用操作欄中的主題上下文。

我的代碼是如何在標準的Android中完成的,你必須得到ActionBar,然而適當的。如果您將主題Context傳遞給SearchView,那麼它將使用適當的樣式,即不會將其自身渲染爲在淺色背景上。

+0

你可以請示範代碼「傳遞主題上下文到SearchView」嗎? – 2015-08-12 07:35:16

相關問題