8

我正在使用 ActionBarSherlock。我希望能够在操作栏中显示两个按钮以响应某个用户操作。用户操作与 Action Bar 完全无关。按钮的可见性需要通过调用方法来控制。此外,对单击这些按钮的响应应由我自己的应用程序代码处理。

理想情况下,按钮应该看起来就像在使用 将菜单项定义为操作项时创建的按钮一样,如此android:showAsAction="ifRoom|withText"所示。

我的问题是,据我所知,标准ActionBarAPI 没有提供这样的机制来随意显示或隐藏操作项按钮,并且唯一可以定义菜单项的时间onCreateOptionsMenu()当然是系统调用的时间。

我的信念是,我要添加这样的按钮并随意显示/隐藏它们的唯一方法是为它们创建自定义布局并利用.setCustomView()它们将它们放入操作栏中。人们通常会同意这一点,还是我错过了什么?

如果我确实使用了.setCustomView(),我希望我的按钮看起来与 ActionBarSherlock 为具有该属性的菜单项显示的操作项按钮相同android:showAsAction="ifRoom|withText"。为此,谁能告诉我我应该使用 ActionBarSherlock 库中的哪些特定主题、样式或布局?我已经尝试过使用R.layout.abs__action_menu_item_layout,但是尝试膨胀此布局会产生与colorStateList尝试膨胀CapitalizingButton该布局包含的 相关的异常。

4

3 回答 3

11

您可以调用setVisibility实例MenuItem

文档指出“您可以安全地保留菜单(以及从中创建的任何项目),根据需要对其进行修改,直到下次调用 onCreateOptionsMenu()。”

于 2012-07-22T19:21:40.767 回答
9

如果您希望这两个按钮具有菜单项的外观和感觉,那么您应该将它们设为菜单项。您认为菜单项只能在中定义的假设onCreateOptionsMenu()是不正确的,因为还有一个名为 的方法onPrepareOptionsMenu(),每次在菜单显示之前都会调用该方法。与活动的invalidateOptionsMenu()方法一起,您可以轻松创建实时反映当前状态的菜单数据。

另一种方法是保留对单个MenuItem对象的引用,因为文档声明其保存以保留这些对象,并在适当时更改它们的可见性。你可能仍然需要打电话invalidateOptionsMenu()来更新菜单——我不记得了。(编辑:杰克在这个上打败了我)

就个人而言,我更喜欢第一种方法,因为您将所有与菜单相关的逻辑分组在一起,并且可见性基于某种状态/模型。第二个选项可能更容易实现,具体取决于您当前的代码,但可能会导致到处都是菜单。

于 2012-07-22T19:28:42.023 回答
2

你检查过演示样品吗?

他们在“功能切换”上有这个功能。

于 2012-07-22T19:29:30.443 回答