2014-09-02 163 views
3

我回到我的主要活动从一个片段和一些逻辑,我必须改变操作栏菜单上图标的出现。以编程方式更改ActionBar图标

这是操作栏上的菜单:

<?xml version="1.0" encoding="utf-8"?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="it.gn.sfa.Main"> 


    <item 
     android:id="@+id/action_search" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@drawable/ic_action_search" 
     android:showAsAction="collapseActionView|ifRoom" 
     android:title="Search" /> 
    <item 
     android:id="@+id/action_filter" 
     android:icon="@drawable/ic_action_filter_empty" 
     android:showAsAction="ifRoom" 
     android:title="Filter" /> 
    <item 
     android:id="@+id/action_new" 
     android:icon="@drawable/ic_action_new" 
     android:showAsAction="ifRoom" 
     android:title="New" /> 

</menu> 

我不得不改变sencond项目(一个使用id = action_filter)。 我试过不同的解决方案,发现在不同的职位上。最受好评的是

mOptionsMenu.getItem(0).setIcon(getResources().getDrawable(R.drawable.ic_action_filter)); 

但似乎不工作。

另一方面getActionBar().setIcon(getResources().getDrawable(R.drawable.ic_action_filter));更改标志,我不想这样。

我该如何更改菜单上的第二项?

+1

你能发布所有与mOptionsMenu相关的代码吗?具体来说,何时以及如何实例化此mOptionsMenu变量 – 2014-09-02 16:25:36

+0

我在onCreateOptionsMenu(菜单菜单)中实例化mOptionsMenu:mOptionsMenu = menu。 – Luca 2014-09-02 17:29:54

+0

查看我的答案:http://stackoverflow.com/a/28478791/1038702 – David 2015-02-12 13:39:43

回答

15

试试这个

mOptionsMenu.findItem(R.id.action_filter).setIcon(R.drawable.ic_action_filter); 

假设你拥有这一切设立mOptionsMenu

private Menu mOptionsMenu; 
... 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    // inflating your menu here 
    mOptionsMenu = menu; 
    return super.onCreateOptionsMenu(menu); 
} 

希望它能帮助:)

+0

mOptionsMenu正是以这种方式使用的。但在此之后,我膨胀了不同的布局。那是问题吗? – Luca 2014-09-02 17:30:41

+0

刚刚尝试和mOptionsMenu.findItem(R.id.action_filter).setIcon(R.drawable.ic_action_filter);给我一个nullPointerException。 – Luca 2014-09-02 18:05:23

+0

嗯,在这里发布你的猿,导致我的答案为我工作,我测试它在我自己的测试案例。 – Spurdow 2014-09-03 01:18:55

3

我希望这将是帮助你

getSupportActionBar().setHomeButtonEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffffff'>" + "Messages" + "</font>")); 
    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.messagebar_color))); 
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow_black); 
0

I管理旋转/更改图标是这样的:

MenuItem item = getToolbar().getMenu().findItem(Menu.FIRST); 
<prepare the image view from drawable here> 
item.setActionView(imageView); 

似乎工作确定。 您也可以简单地使用item.setIcon()

1

您必须修改onCreateOptionsMenu(菜单菜单)

我改变了我的搜索栏的颜色编程。我在这里发布代码。希望能帮助到你。

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.items, menu); 
    menu.getItem(0).setIcon(getTintedDrawable(R.drawable.search, R.color.blue)); 
    return super.onCreateOptionsMenu(menu); 
} 

getTintedDrawable()是我创建它返回一个可拉伸的函数。所以你所要做的就是用你的drawable替换getTintedDrawable(R.drawable.search, R.color.blue)

注意:我已经使用了menu.getItem(0)我的代码,因为我只在menu/items.xml中定义了1个项目。如果您有多个尝试不同的值(从0到小于菜单项的数量)。我的猜测是,它的数量在哪个项目被定义,但我不太确定。

相关问题