【问题标题】:get drawable from Android Menu Item Icon从 Android 菜单项图标获取可绘制
【发布时间】:2014-03-28 15:04:46
【问题描述】:

我在菜单项中有一个书签图标。我想根据之前是否按下书签来更改图标中的可绘制对象。

我有两个drawbles,staro(意思是星星橙色)或starw(意思是星星白色)。我只想在按下时切换它。

我如何知道public boolean onOptionsItemSelected(MenuItem item) 方法中的图标中有哪个drawble。是否可以通过项目知道可绘制对象。我所知道的是 item.getIcon() 不是drawble。我无法将item.getIcon()R.drawable.starto 进行比较

【问题讨论】:

  • 使用共享首选项。记住书签之前是否被按下过根据它改变你的drawable
  • 是的,这是我会选择的第二个选项,所以,是否无法从菜单项中获取 drawble
  • 但无需将可绘制对象存储到共享首选项中。存储是否按下的布尔值并根据它进行更改

标签: android android-drawable android-menu


【解决方案1】:

你可以试试

if (item.getIcon().getConstantState().equals(
        getResources().getDrawable(R.drawable.starto).getConstantState()
)) {
    ...
}

如上所述here

【讨论】:

  • 这在 api 级别 19 及更低级别中可以正常工作,但在更高级别的 api 中无法正常工作。
【解决方案2】:

您可以在每次显示菜单之前调用的 onPrepareOptionsMenu() 中进行更改。它适合基于一些动态数据显示/隐藏选项。

如果你现在已经具备条件,可以直接调用

if (condition_for_orange) {
  menu.findItem(resourceId).setIcon(R.drawable.staro);
} else {
  menu.findItem(resourceId).setIcon(R.drawable.startw);
}

您可以使用 Shared Preference 或其他一些可以存储状态的全局变量,这可以帮助您决定现在显示哪个图标。

【讨论】:

    【解决方案3】:

    你也可以比较一下。

    你可以通过

    找到drawable的id
    int identifier = getResources().getIdentifier("pic1", "drawable","android.demo");
    

    然后您可以将其与R.drawable.starto ` 进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多