2014-09-02 101 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到小於菜單項的數量)。我的猜測是,它的數量在哪個項目被定義,但我不太確定。