2016-10-20 100 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)); 
相关问题