以编程方式更改ActionBar图标

时间:2014-09-02 15:28:43

标签: android android-actionbar android-menu

我从一个片段回到我的主要活动,为了某些逻辑,我必须改变操作栏菜单上图标的外观。

这是操作栏上的菜单:

<?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));更改徽标,我不想这样做。

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

4 个答案:

答案 0 :(得分:17)

尝试这个

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);
}

希望有所帮助:)

答案 1 :(得分: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);

答案 2 :(得分: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的函数。所以你需要做的就是用你的drawable替换getTintedDrawable(R.drawable.search, R.color.blue)

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

答案 3 :(得分:0)

我设法以这种方式旋转/更改图标:

[ [101, 102, 103], [201, 202, 203], [301, 302, 303], [401, 402, 403] ]

似乎工作正常。 您也可以简单地使用import UIKit class RestaurantDetailViewController: UIViewController { @IBOutlet var restaurantImageView: UIImageView! var restaurantImage = "" override func viewDidLoad () { super.viewDidLoad () restaurantImageView.image = UIImage(named: restaurantImage) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showRestaurantDetail" { if let indexPath = tableView.indexPathSelectedRow { let destinationController = segue.destinationViewController as! RestaurantDetailViewController destinationController.restaurantImage = restaurantImageView[indexPath.row] } } } }