2016-10-20 128 views
2

如何更改工具欄搜索圖標顏色?我希望它是白色的。我用我自己的白色drawable改變了,但結果仍然是黑色的。我讀過this post,但後期問題是文字顏色不是圖標顏色。更改工具欄非隱藏菜單圖標顏色

截圖

enter image description here

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.zihadrizkyef.project_katalog_grosirmukenalukis_admin.MainActivity" 

    android:id="@+id/activity_home" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/myToolbar" 
     android:layout_height="?android:attr/actionBarSize" 
     android:layout_width="match_parent" 
     android:background="@color/colorPrimary" 
     android:theme="@style/myToolbarTheme"/> 

    <ListView 
     android:id="@+id/lvProduct" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

style.xml

<resources> 

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 

     <item name="android:buttonStyle">@style/MyButtonStyle</item> 
    </style> 

    <style name="MyButtonStyle" parent="Base.Widget.AppCompat.Button"> 
     <item name="android:textAllCaps">false</item> 
     <item name="android:background">@drawable/mybutton</item> 
     <item name="android:textColor">@color/myWidgetContentColor</item> 
    </style> 

    <style name="myToolbarTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="android:textColorPrimary">@color/myWidgetContentColor</item> 
    </style> 
</resources> 

menu_home.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_search" 
     app:showAsAction="always" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     android:title="Search" 
     android:icon="@drawable/ic_action_search"/> 
</menu> 
+1

你能證明你的菜單文件? – himanshu1496

+0

您是否嘗試過給該圖標添加色調顏色? –

+0

你可以用mToolBarTheme替換它,並檢查它嗎? ImGenie

回答

1

首先,你需要創建自己的菜單,然後將自己的圖標菜單項。

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context="com.bruce.example.search.SearchActivity"> 
<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    app:showAsAction="never" /> 
<item 
    android:id="@+id/action_search" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    android:icon="@drawable/ic_search" 
    app:showAsAction="always" /> 

然後只是簡單地覆蓋onCreateOptionsMenu誇大你的自定義菜單。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_search, menu); 
    return true; 
} 

讓我知道,如果你有任何問題,它

+0

謝謝。但抱歉,我已經做到了,我忘了在帖子中告訴它。 – zihadrizkyef

+0

我用我自己的白色PNG圖標,但結果是黑色 – zihadrizkyef

1

放下面的代碼到你的活動的onCreateOptionsMenu()。

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_home, menu); 
     MenuItem favoriteItem = menu.findItem(R.id.action_search); 
     Drawable newIcon = (Drawable)favoriteItem.getIcon(); 
     newIcon.mutate().setColorFilter(Color.argb(255, 200, 200, 200), PorterDuff.Mode.SRC_IN); 
     favoriteItem.setIcon(newIcon); 
     return true; 
    } 

你可以給{Color.argb(255,200,200,200)}

0

創建一個XML文件,自己的顏色,你可以稱之爲ic_action_search_white,用色彩來改變圖標的​​顏色。

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/ic_action_search" 
    android:tint="@color/white"/> 

然後在你的設置菜單項android:icon="@drawable/ic_action_search_white",可繪製是剛剛創建的XML文件。或者,您可以通過編程設置圖標yourSearchMenuItem.setIcon(R.drawable.ic_action_search_white)

讓我知道,如果它

+0

仍然不工作:( – zihadrizkyef

0

更改AppTheme以下:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 

    <item name="android:buttonStyle">@style/MyButtonStyle</item> 
</style> 

使其成爲黑暗actionBar將解決你的菜單圖標顏色的問題。

更新:增加了windowNoTitle設置爲true

+0

我使用v7工具欄,它給了我 'java.lang.IllegalStateException:此活動已提供一個操作欄不要請求Window.FEATURE_SUPPORT_ACTION_BAR並在你的主題中設置windowActionBar爲false來代替使用工具欄。' – zihadrizkyef

+0

好嗎你在'AppTheme'風格中添加了 false'as如果主題是針對上面的棒棒糖,然後添加' false'。 – himanshu1496

+0

對不起,我沒有看到' false '。當我把它,我得到錯誤'java.lang.IllegalArgumentException:AppCompat不支持當前的主題功能:{ windowActionBar:false,windowActionBarOverlay:false,android:windowIsFloating:false,windowActionModeOverlay:false,windowNoTitle:false}' – zihadrizkyef

1

我得到了答案:

main_activity.xml

<android.support.v7.widget.Toolbar 
    android:id="@+id/myToolbar" 
    android:layout_height="?android:attr/actionBarSize" 
    android:layout_width="match_parent" 
    android:background="@color/colorPrimary" 
    android:theme="@style/myToolbarTheme"/> 

風格。xml

<style name="myToolbarTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorControlNormal">#fff</item> 
</style> 
+0

如果你不想改變主題,只改變searchView顏色,那麼你可以試試我的答案;) – MashukKhan

0

添加以下方法,其中聲明瞭searchView。

public Drawable changeDrawableTint(Drawable drawable, int color){ 
    final Drawable wrappedDrawable = DrawableCompat.wrap(drawable); 
    DrawableCompat.setTintList(wrappedDrawable, ColorStateList 
      .valueOf(color)); 
    return wrappedDrawable; 
} 

現在這兩條線,你已經寫

MenuItem searchItem = menu.findItem(R.id.action_search); 
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

只需添加這行

// To change the color of searchView 
searchItem.setIcon(changeDrawableTint(searchItem.getIcon(), Color.WHITE)); 
相關問題