ActionBarSherlock:通过方法调用以编程方式显示/隐藏Action Item按钮

时间:2012-07-22 19:05:02

标签: android android-actionbar actionbarsherlock

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

理想情况下,按钮的外观应与使用android:showAsAction="ifRoom|withText"将菜单项定义为操作项时创建的按钮完全相同,如图here所示。

我的问题是,据我所知,标准的ActionBar API没有提供这样的机制来随意显示或隐藏Action Item按钮,并且唯一可以定义菜单项的时间是{ {1}}当然是由系统调用的。

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

如果我沿着使用.setCustomView()的路线前进,我希望我的按钮看起来与ActionBarSherlock为具有属性.setCustomView()的菜单项显示的Action Item按钮相同。要做到这一点,任何人都可以告诉我ActionBarSherlock库中我应该使用哪些特定的主题,样式或布局?我已经尝试使用android:showAsAction="ifRoom|withText",但在尝试通知布局包含的R.layout.abs__action_menu_item_layout时,尝试对此布局进行膨胀会产生与colorStateList相关的异常。

3 个答案:

答案 0 :(得分:11)

您可以在setVisibility个实例上致电MenuItem

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

答案 1 :(得分:9)

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

另一种方法是保留对各个MenuItem对象的引用,因为文档说明了保存以保留这些对象,并在适当时更改其可见性。您可能仍然需要致电invalidateOptionsMenu()来更新菜单 - 我无法记住这一点。 (编辑:杰克在这个上击败了我)

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

答案 2 :(得分:2)

你检查了演示样本吗?

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