我正在使用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相关的异常。
发布于 2012-07-23 03:28:42
如果您希望这两个按钮具有菜单项的外观,那么您应该使它们成为菜单项。您认为菜单项只能在onCreateOptionsMenu()中定义的假设是错误的,因为还有一个名为onPrepareOptionsMenu()的方法,它将在每次显示菜单之前被调用。与活动的invalidateOptionsMenu()方法一起,您可以轻松地创建一个menu dat来实时反映当前状态。
另一种方法是保留对单个MenuItem对象的引用,因为文档声明保存以保留这些对象,并在适当的时候更改它们的可见性。你可能仍然需要调用invalidateOptionsMenu()来更新菜单--我想不起来了。(杰克编辑:在这一点上比我早了一步)
就我个人而言,我更喜欢第一种方法,因为您将所有与菜单相关的逻辑组合在一起,并且可见性基于某种状态/模型。第二种选择可能更容易实现,这取决于您当前的代码,但可能会导致到处都是菜单。
发布于 2012-07-23 03:21:41
您可以在MenuItem实例上调用setVisibility。
“在下次调用onCreateOptionsMenu()之前,您可以安全地持有菜单(以及从菜单创建的任何项),并根据需要对其进行修改”的documentation states。
发布于 2012-07-23 03:29:30
你检查过样例了吗?
他们在"feature toggles“上有这个功能。
https://stackoverflow.com/questions/11603186
复制相似问题