【问题标题】:Programmatically change ActionBar icon以编程方式更改 ActionBar 图标
【发布时间】:2016-09-02 20:11:09
【问题描述】:

我要从一个片段返回我的主要活动,对于某些逻辑,我必须更改操作栏菜单上图标的外观。

这是操作栏上的菜单:

<?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>

我必须更改第二个项目(id = action_filter 的那个)。 我尝试了不同的解决方案,在不同的帖子中找到。评价最高的是

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

但似乎不起作用。

另一边getActionBar().setIcon(getResources().getDrawable(R.drawable.ic_action_filter));改了logo,我不想这样。

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

【问题讨论】:

  • 你能发布所有与mOptionsMenu相关的代码吗?具体来说,您何时以及如何实例化此 mOptionsMenu 变量
  • 我在 onCreateOptionsMenu(Menu menu) 中实例化 mOptionsMenu:mOptionsMenu = menu.
  • 在这里查看我的答案:stackoverflow.com/a/28478791/1038702

标签: android android-actionbar android-menu


【解决方案1】:

试试这个

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

希望对你有帮助:)

【讨论】:

  • mOptionsMenu 就是这样使用的。但在那条线之后,我膨胀了一个不同的布局。有问题吗?
  • 刚试过mOptionsMenu.findItem(R.id.action_filter).setIcon(R.drawable.ic_action_filter);给我一个 nullPointerException。
  • 嗯,在这里发布你的 npe,因为我的答案对我有用,我在我自己的测试用例中对其进行了测试。
  • 我已经发布了所有内容here。希望清楚。
【解决方案2】:

希望对你有帮助

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

【讨论】:

    【解决方案3】:

    你必须修改你的 onCreateOptionsMenu(Menu menu)

    我以编程方式更改了搜索栏的颜色。我在这里发布代码。希望对您有所帮助。

        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 中只定义了一项。如果您有多个尝试不同的值(从 0 到比菜单项数少一)。我的猜测是它是定义项目的编号,但我不太确定。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-21
        • 1970-01-01
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 2014-03-07
        • 1970-01-01
        • 2015-10-03
        • 2013-12-16
        相关资源
        最近更新 更多