ActionBarSherlock 与 ActionBar 兼容性的区别

行动,巴洛克动作条兼容性的区别是什么

几天前 Google 刚刚发布了 ActionBar 兼容性,这让我非常困惑。动作条兼容性是否与 ActionBarSherlock 一样工作,代码是否相同?

例如: 应用程序图标导航“向上”或 ActionBar. Tab 是否支持操作栏兼容性?

44455 次浏览

ActionBarSherlock 为你的应用程序提供了一个动作条,不管你的应用程序运行的是什么版本的 android API。操作栏兼容性只有当您运行的设备是 API 级别3.0或更高时才能提供操作栏。

* 注意,如果你运行的设备不是3.0或更高版本,ActionBarSherlock 将使用它自己的动作条自定义实现,而不是原生的。

编辑

看起来事情已经发生了变化,实际上 ActionBarSherlock 和 ActionBar 兼容性已经没有什么区别了。详情请参阅下面的评论。

编辑

在使用了两者之后,我可以说我实际上更喜欢 ActionBarSherlock 而不是 Action Bar 兼容性。ActionBarSherlock 真的很容易使用。

编辑 正如 LOG _ TAG 提到的,现在 Android 支持库中支持操作栏。我还没机会用它,但我想这是最好的选择。

Well@Jake 的实现比 Actionbar Compat 更进一步,更准确地说,Actionbar Compat 只是一个基本的例子,说明如何用一个用于 Honeycomb (API 13)之前发布版本的伪操作栏来支持所有应用程序。虽然他们的目标是相同的交叉兼容的行动条,他们有不同的方法。

ActionbarCompat 方法

这个实现不使用 Compatiability Android 支持库,而是创建一个名为 活动的基类创建一个 帮手的单个实例这个助手作为工厂本身返回 APIS 的三个部分的不同实现,它返回

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

《神探夏洛克》

首先这是个棘手的问题,因为,我不是作者也许 Jake 可以进一步解释,但我会试一试。

就像 Compat Sherlock 做了不同的实现,一个是“ Compat”,另一个是“原生”。它强制您从 SherlockActivity 或从 SherlockFragmentActivity 扩展,因为这两个基类具有分派 ActionBar 的方法。

这是一个庞大而复杂的项目,无法用一篇文章来解释。建议你挖掘周围的 夏洛克 · 吉瑟布回购抓住一看,正如 杰夫 · 阿特伍德所说

enter image description here

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

动作条兼容性可以被视为一个“样本”或一个良好的开端,如果你只想拍一下你的应用程序顶部的动作条。

ActionBarSherlock 建立在兼容性库的基础上,并在3.0之前的设备上为您(如动作条兼容性示例)提供了一个动作条。此外,它还具有 ActionBar Compat 代码中没有的额外特性。这包括诸如但不限于

  • SetNavigationMode (用于操作栏中的制表符和旋转器)
  • 对话框碎片
  • 上下文操作栏(CAB)一个接管操作栏的菜单,例如用于多重选择( http://developer.android.com/design/patterns/new-4-0.html )这是一个 ICS 特性(!)为此,必须在 ActionbarSherlock 库中引入 ActionMode 类的实现(在 API 级别11中引入)
  • 片段和片段活动实现——因为片段可以实现 onCreateOptions 菜单,所以我们需要确保使用 SupportMenu 。
  • 两个主题不太像全息图。黑暗和全息图。光(主题。夏洛克,主题。夏洛克。光)
  • ICS 功能“分割动作条”

我发现使用 ActionbarSherlock 的唯一缺点就是你把自己锁在了那个库里。如果由于某种原因,它将在不久的将来消失,您将不得不自己维护它(例如,如果没有 Jellybean 实现)。这是一个麻烦(不是一个很大的问题) ,因为所有的片段都扩展了夏洛克碎片和所有的活动。 夏洛克活动。

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

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

我构建了两个简单的应用程序来展示 ActionBarSherlock 和 ActionBar 兼容性之间的视觉差异:

App using compatibility library

App using sherlock library

现在按下菜单按钮时的外观:

App using compatibility on menu pressed

App using sherlock on menu pressed


正如你所看到的,图像只是强制执行所说的内容

下面您可以看到应用程序源代码。

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;
}
}

夏洛克的活动:

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);
}


}

在夏洛克应用程序上还需要一个额外的配置:

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

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

ActionBarSherlock vs ActionBarCompat:

我只是想在 ActionBarSherlock 和 ActionBarCompat Lib 之间放一些代码差异

 ActionBarSherlock vs ActionBarCompat **strong text**

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

步骤:

  1. 导入 AppCompat项目。

  2. ActionBarActivity代替 SherlockFragmentActivity

  3. Fragment代替 SherlockFragment

  4. 更改 MenuMenuItemgetSupportMenuInflater()参考文献。 修改获取操作视图的方式。

  5. 修改你的 主题斯泰尔斯

更多信息,请参考 + NickButcher(谷歌)的幻灯片

enter image description here

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

不要忘记阅读这个 开发者,机器人了解更多关于 ABC 的信息!

注意: 不幸的是,使用支持库不能像 ABS 那样为单元测试设置它。

产出:

enter image description here

图片来源: Gabriele Mariotti

也许我们应该更新的答案,因为谷歌公布的官方行动栏支持自 API18

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

如果您使用的是第三方解决方案(比如 ActionBarSherlock) ,有几个理由可以考虑升级:

  • 可以随着 Action Bar API 的发展而不断更新。
  • 综合祖传导航支援。
  • 框架 Menu 和 MenuItem 类的使用。
  • 继续使用支持库的片段类。
  • 用于 DrawerLayout 的 ActionBarDrawerToggle 的集成支持。
  • PopupMenu 的后端。

ActionBarSherlock 是一个坚实的、经过良好测试的库,长期以来为开发人员提供了很好的服务。如果您已经在使用它,并且目前不需要以上任何内容,那么就没有必要进行迁移。

  • 我强烈认为,您应该使用 ActionBarCompat的所有新的 希望支持旧设备的项目

  • 迁移现有项目也可能有意义 了解为什么应该迁移或立即使用 ActionBarCompat 如何迁移现有项目

为什么你更喜欢 ActionBarCompat 而不是 ActionBarSherlock?

比起 ActionbarSherlock,您更喜欢 ActionbarCompat 的原因有很多。

  1. 首先这个项目是由谷歌,是支持的一部分 图书馆,因此可能会支持新的行动栏相关的东西在 与此同时,谷歌也推出了普通的 Android 系统

  2. 另一个很好的理由是它支持 < code > 导航抽屉 模式 刚刚开箱即用,而 ActionBarSherlock 没有 如果你想把这个抽屉添加到现有的项目/应用程序中,你应该 迁移

  3. 最后也是最重要的一点是《神探夏洛克》的创作者, Jake Wharton 在 Google + 上宣布 ActionBarSherlock 被阻止了。 ActionBarSherlock 4.4是 最后一个版本,可能会得到错误修复-但不会有任何新的 特性: 因此,如果新的功能包含在操作栏中,您可以 没有跟上它的步伐,巴歇洛克