ActionBarSherlock和ActionBar兼容性的区别

ActionBarSherlock和Action Bar Compatibility的区别是什么?

几天前Google刚刚发布了ActionBar兼容性,这让我很困惑。 Action Bar兼容性与ActionBarSherlock是一样的吗?编码是一样的吗?

示例: 应用程序图标是否在Action Bar Compatibility中支持导航“向上”或ActionBar.Tab?

无论您的应用程序运行在哪个版本的Android API上,ActionBarSherlock都为您的应用程序提供了一个操作栏。 只有当您运行的设备的API级别为3.0或更高时,操作栏兼容性才能为您提供操作栏。

*请注意,如果您正在运行的设备不是3.0或更高版本,则ActionBarSherlock将使用它自己的操作栏的自定义实现,而不是本地的。

– 编辑 –

看起来事情已经发生了变化,ActionBarSherlock和Action Bar Compatibility之间实际上没有区别了。 有关详细信息,请阅读下面的注释。

– 编辑 –

在使用了两者之后,我可以说我更喜欢ActionBarSherlock来实现Action Bar Compatibility。 ActionBarSherlock非常容易使用。

–EDIT–正如LOG_TAG提到的,现在支持Android支持库中的操作栏。 我还没有机会使用它,但我会想象这是最好的使用。

ActionBarSherlock vs ActionBarCompat:

我只是想在ActionBarSherlock和ActionBarCompat的Lib之间的几个代码差异

ActionBarSherlock vs ActionBarCompat **强壮的文字**

我们可以将一些应用程序从ActionBarSherlock移植到ActionBarCompat:

脚步:

  1. 导入AppCompat项目。

  2. ActionBarActivityreplaceSherlockFragmentActivity

  3. FragmentreplaceSherlockFragment

  4. 更改MenuMenuItemgetSupportMenuInflater()引用。 修改您获取操作视图的方式。

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. 修改您的主题样式

欲了解更多信息,请参阅此幻灯片+ NickButcher (Google)

在这里输入图像描述

感谢来源: http : //gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

不要忘了阅读这个developer.android更多关于ABC!

注意:对于支持库来说,设置unit testing的方式与ABS相同。

输出:

在这里输入图像描述

积分:Gabriele Mariotti

用一个实际的例子来完成@ Kurtis Nusbaum。

更新:正如@ rudy-s所说,用最新的android支持库(api 18),我看到他们已经内置了对actionbar(称为ActionBarCompat类)的支持。

我构build了两个简单的应用程序来显示ActionBarSherlock和ActionBar兼容性之间的视觉差异。 看比较图像:

使用兼容性库的应用

使用sherlock库的应用程序

现在当菜单button被按下时的外观:

应用程序使用兼容性按下菜单

按下菜单上的sherlock应用程序


正如你所看到的,这些图像只是执行所说的话。 只有当您运行的设备的API级别为3.0或更高时,操作栏兼容性才能为您提供操作栏。 虽然Sherlock更普遍。

下面你可以看到应用程序的来源。

菜单的xml文件是一样的:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_1" android:orderInCategory="100" android:showAsAction="always" android:title="@string/action1"/> <item android:id="@+id/action_2" android:orderInCategory="100" android:showAsAction="ifRoom" android:title="@string/action2"/> <item android:id="@+id/action_3" android:orderInCategory="100" android:showAsAction="ifRoom" android:title="@string/action3"/> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> </menu> 

兼容性的活动:

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Sherlock的活动:

 public class MainActivity extends SherlockActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { getSupportMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } } 

sherlock应用程序需要额外的configuration:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">

更新:正如@ rudy-s所说,用最新的android支持库(api 18),我看到他们已经内置了对actionbar(称为ActionBarCompat类)的支持。

Actionbar Sherlock比简单的Actionbar兼容性项目要先进得多,而且要雄心勃勃。

如果您只想在应用程序顶部添加一个Action Bar,Action Bar的兼容性可以被认为是一个“示例”或者一个很好的起点。

ActionBarSherlock构build在兼容性库上,并为您提供(如操作栏兼容性示例)3.0之前的设备上的操作栏。 另外它还有一些在ActionBar兼容代码中没有的额外function。 这包括但不限于这些function

  • setNavigationMode(用于操作栏中的Tabs和Spinner)
  • 对话碎片
  • 上下文操作栏(CAB)一个接pipe操作栏的菜单,用于多选(http://developer.android.com/design/patterns/new-4-0.html)这是一个ICSfunction(; !)为此,必须将ActionMode类的实现(在API级别11中引入)引入到ActionbarSherlock库
  • 片段和FragmentActivity实现 – 因为片段可以实现onCreateOptions菜单,我们需要确保使用SupportMenuInflater。
  • 两个主题不是很不像Holo.Dark和Holo.Light(Theme.Sherlock,Theme.Sherlock.Light)
  • ICSfunction“拆分操作栏”

我看到使用ActionbarSherlock唯一的缺点是你把自己locking在图书馆。 如果由于某种原因它会在不久的将来消失,你将不得不自己维护它(例如,如果没有Jellybean实现出现的话)。 这是一个麻烦(不是一个大问题),因为所有的片段扩展SherlockFragemnt和所有的活动。 SherlockActivity。

那么@Jake的实现比Actionbar的compat更进一步,更确切地说,Actionbar Compat只是一个基本的例子,你如何使用Honeycomb之前的版本的伪操作栏来支持所有的应用(API 13)。 虽然他们的目标是相同的交叉兼容的操作栏,他们有不同的方法。

ActionbarCompat Aproach

这个实现没有使用兼容性Android支持库,而是创build了一个名为ActionBarActivity的基类,创build了一个Helper的单个实例,这个帮助者作为工厂本身返回三个APIS段的不同实现,它返回

  • ActionbarBaseHelper :用于HoneyComb之前。
  • ActionBarHoneyComb :用于HoneyComb
  • ActionBarHelperICS :用于ICS基础设备。

最有趣的部分是在ActionbarBaseHelper ,因为它有最重要的代码,我build议你理解这个类,你会得到整个例子。

行动酒吧Sherlock

那么这是棘手的首先,因为,我不是作者,也许杰克可以进一步解释这一点,但我会试一试。

正如同样的福尔摩斯做了不同的实现,但一个是“Compat”,另一个是本机。 它迫使你从SherlockActivity或SherlockFragmentActivity进行扩展,因为这两个基类有调度ActionBar的方法。

这是一个庞大而复杂的项目,无法在一个单独的文章中解释。 build议你围绕Sherlock Github回购挖掘一下,就像Jeff Atwood说的那样

在这里输入图像描述

  • 我坚信你应该使用ActionBarCompat来支持所有想要支持旧设备的新项目。

  • 迁移现有项目也许是有意义的。 所以请继续阅读,了解为什么您应该立即迁移或使用ActionBarCompat,以及如何迁移现有的项目。

为什么你应该比ActionBarSherlock更喜欢ActionBarCompat?

ActionbarCompat优先于ActionbarSherlock有很多原因。

  1. 首先这个项目是由谷歌,是支持库的一部分,因此可能会支持新的行动酒吧相关的东西,同时谷歌发布他们的Android股票。

  2. 另一个很好的理由是它支持Navigation Drawer pattern ,而ActionBarSherlock则不支持。 因此,如果你想把这个抽屉添加到现有的项目/应用程序,你应该迁移。

  3. 最后也是最重要的是,ActionBarSherlock的创造者杰克·沃顿(Jake Wharton)在Google+上宣布,ActionBarSherlock的进一步发展已经停止。 ActionBarSherlock 4.4是最后一个版本,可能会修复错误 – 但不会有任何新function:所以如果新function包含在操作栏中,您可能无法跟上actionbarsherlock。

也许我们应该更新答案,因为谷歌自API18以来发表的官方Actionbar的支持?

下面的块来自官方博客关于这两个库:

如果您使用的是第三方解决scheme(如ActionBarSherlock),则需要考虑升级的几个原因:

  • 随着Action Bar API的发展,可以保持更新。
  • 综合祖先导航支持。
  • 使用框架Menu和MenuItem类。
  • 继续使用支持库的片段类。
  • 集成对ActionBarDrawerToggle的支持以用于DrawerLayout。
  • PopupMenu的Backport。

ActionBarSherlock是一个经过良好testing的可靠库,长期以来一直为开发人员提供服务。 如果您已经在使用它,并且目前不需要上述任何一个,则不需要迁移。