1

另一个兼容性问题。API级别> 3.0但仍支持API的操作栏<3.0

技术问题

我需要使用一个tabbed action bar在API级别3.0和更大,以fragments之间切换。但是,我也需要能够在api级别< 3.0中以某种方式在这些fragments之间切换。

作品中的扳手是我已经下载了一个自定义兼容性库,允许我使用google mapsfragments,因此我无法使用库。

问题

我怎样才能实现在3.0和更高的标签ActionBar解决方案,也迎合了较大的市场是3.0和少吗?

任何帮助将是盛大的。

回答

1

所以我设法找出了一个解决方案,它只是花了我一段时间才发布在这里。

这是适合我的解决方案。我需要使用ActionBar,但我也需要使用MapActivity以及FragmentActivity,因此无法使用ActionBarSherlock。

我所做的是以下几点:

  • 创建了一个名为CCActionBar片段,加入自己作为一个侦听器处理的CCTab的触摸(下文解释)。它还会扩展名为action barlayout的布局,该布局具有排列的选项卡和图像,只是在运行时引用选项卡。

  • 创建一个名为CCTab的自定义视图,它代表操作栏的选项卡。当它触摸它告诉它的听众(CCActionBar)它被触动。

  • 在我的主布局xml文件中有一个操作栏容器,我根据API级别在运行时显示或隐藏该容器。

  • 现在我在我的OnCreate方法的主要活动中检查我的API级别是否大于3.0。如果是我只是实现标准的ActionBar,确保我的自定义操作栏容器不可见。如果它不是我设置我的自定义操作栏,并确保我的xml布局中的操作栏容器是可见的。

    • 然后,我确保在使用任一方法时按下标签时,它将以相同的方式处理,因此一旦设置完成,您不必处理它。

我希望这可以帮助别人的地方,或者至少给你如何进行的想法。

3

你想要的是ActionBarSherlock。它使用API​​> = 3的本机操作栏,并为API级别2.x提供向后兼容性。还有Action Bar Compatibility示例项目(列为SupportAppNavigation,我相信)。我认为这本质上是一回事。

+0

我不能实现这个没有废除我的地图片段的支持? – StuStirling 2012-08-06 15:31:22

+0

@ DiscoS2 - 为了在3.0之前提供片段支持,您需要使用兼容性库。 ActionBarSherlock是兼容性库的扩展,所以我不明白你为什么需要废弃地图片段支持。你能解释一下你的担忧吗? – 2012-08-06 15:33:39

+0

要实现谷歌地图以及片段功能,我必须已经使用兼容性库的扩展,所以我担心我不能使用原始库的两个扩展? – StuStirling 2012-08-06 15:34:46

0

我推荐的是使用ActionBarSherlock来获得标签式操作栏功能。

我认为你还需要MapView支持Fragment。为此,我会推荐MapView in a Fragment (Honeycomb) 的解决方案(请参阅user1414726回答示例代码)。

我认为这是一个比使用库更好的解决方案,虽然它使用了不推荐的LocalActivityManger。但在我看来,这是一个比使用库更好的想法,其中每个Activity都是我假设您使用的MapViewActivity的子类。