2013-01-16 110 views
16

我用「Android Action Bar Style Generator」爲了生成我自己的Holo主題。 然後我添加了兩個圖標到動作欄,一個用於searchFilter,一個用於文件選取器,這兩個圖標都是白色的。文件選擇器圖標(在右側)看起來不錯,但不知怎的,搜索圖標看起來是深灰色的。在搜索文本視圖中鍵入時,關閉按鈕也顯示爲深灰色。如何更改SearchView默認圖標?

我試着改變了操作欄的顏色,也從searchview中取消了成功。爲什麼搜索視圖顯示這種顏色?我該如何改變它?

ActionBar with two actions

非常感謝。

UPDATE:我以爲我的應用程序使用我的圖標,但它沒有,它使用默認的搜索視圖圖標,所以我的問題實際上是,我該如何更改搜索視圖的默認圖標? 這句話在menu.xml文件文件不工作:

android:icon="@drawable/selectable_header_search" 

回答

17

不幸的是,改變SearchView圖標,自定義繪製的,因爲主題屬性searchViewSearchIcon是不公開的沒有簡單的方法。有關詳細信息,請參閱this答案。

但是,我認爲你的問題是由錯誤的主題繼承引起的。請使用android:Theme.Holo.Light.DarkActionBar作爲您主題的基礎。然後操作欄上的默認圖標應該有淺色。

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    ... 
</style> 
-3

對於那些像我一樣,希望能找到一個這樣才能真正改變圖標,你可以用動作條福爾摩斯使用:

 // Getting the 'search_icon' 
     ImageView searchIcon = (ImageView)searchView.findViewById(R.id.abs__search_button); 
     // Setting background of 'search_plate' to earlier defined drawable. 
     searchIcon.setImageResource(R.drawable.search_button_selector); 

你不能用普通的方式android:icon更改默認的一個,因爲與此相關的領域已被設定爲私人領域。

+1

當然,這僅如果您使用actionbarsherlock –

6

嘗試建立在showAsAction此選項:* MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW *

如果沒有這個選項,搜索查看不要拿你設置的圖標操作按鈕。

menu.add("Search") 
      .setIcon(
        getResources().getDrawable(
          R.drawable.selectable_header_search)) 
      .setActionView(searchView) 
      .setShowAsAction(
        MenuItem.SHOW_AS_ACTION_ALWAYS 
          | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
          | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
+1

工作這解決了它(自定義圖標不工作)對我來說,Android 4.1到5.0。相當於菜單中的XML:'app:showAsAction =「always | collapseActionView」' – Jonik

0

我發現在操作欄中更改默認搜索視圖圖標的最簡單方法是在onPrepareOptionsMenu中。你可以看到我的回答here類似的問題!

9

由於searchViewSearchIcon屬性是不公開的,你可以使用下面的代碼更改圖標:

int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null); 
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId); 
searchIcon.setImageResource(R.drawable........); 
+3

This throwings an nullPointerException – desgraci

+0

這不適用於Android 4.3,4.0 – SjoerdvGestel

+0

超級它正在工作 – Bahu

0

在你的主題風格包括此:

<style name="YourTheme.Toolbar"> 
    <item name="searchViewStyle">@style/YourActionBarSearch</item> 
    <item name="editTextColor">@color/your_ab_text_color</item> 
    <item name="android:textColorHint">@color/your_ab_hint_color</item> 
</style> 

現在,您可以定義的樣式SearchView與searchViewStyleeditTextColor將在搜索框中設置文本的顏色。通過設置android:textColorHint,您還可以設置提示的顏色,例如「搜索...」。

<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView"> 
    <item name="searchIcon">@drawable/ic_ab_search</item> 
    <item name="queryBackground">@null</item> 
    <item name="submitBackground">@null</item> 
    <item name="searchHintIcon">@drawable/ic_ab_small_search</item> 
    <item name="defaultQueryHint">@string/toolbar_search_hint</item> 
    <item name="closeIcon">@drawable/ic_ab_small_search_close</item> 
</style> 

這會根據您的喜好調整您的搜索視圖,或多或少。字段searchIcon是操作欄中的圖標。字段searchHintIcon是搜索字段中提示左側的小圖標。字段closeIcon是搜索字段右側的關閉圖標。

檢查了這一點,更多的風格設置:

$ANDROID_SDK/platforms/android-24/data/res/values/styles_holo.xml