首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ActionBarSherlock:通过方法调用以编程方式显示/隐藏Action Item按钮

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

Stack Overflow用户
提问于 2012-07-23 03:05:02
回答 3查看 11.1K关注 0票数 8

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

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

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

我相信,我要添加这样的按钮并随意显示/隐藏它们的唯一方法是为它们创建一个自定义布局,并利用.setCustomView()将它们放入操作栏中。人们是否会普遍同意这一点,或者我是否遗漏了什么?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-23 03:28:42

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

另一种方法是保留对单个MenuItem对象的引用,因为文档声明保存以保留这些对象,并在适当的时候更改它们的可见性。你可能仍然需要调用invalidateOptionsMenu()来更新菜单--我想不起来了。(杰克编辑:在这一点上比我早了一步)

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

票数 9
EN

Stack Overflow用户

发布于 2012-07-23 03:21:41

您可以在MenuItem实例上调用setVisibility

“在下次调用onCreateOptionsMenu()之前,您可以安全地持有菜单(以及从菜单创建的任何项),并根据需要对其进行修改”的documentation states

票数 11
EN

Stack Overflow用户

发布于 2012-07-23 03:29:30

你检查过样例了吗?

他们在"feature toggles“上有这个功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11603186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档