155

ActionBarSherlockAction Bar 兼容性有什么区别

几天前,谷歌刚刚发布了让我很困惑的 ActionBar 兼容性。Action Bar Compatibility 是否与 ActionBarSherlock 的工作方式相同并且编码是否相同?

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

4

7 回答 7

113

ActionBarSherlock 与 ActionBarCompat:

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

ActionBarSherlock vs ActionBarCompat **强文本**

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

脚步:

  1. 导入AppCompat项目。

  2. 替换SherlockFragmentActivityActionBarActivity

  3. 替换SherlockFragmentFragment

  4. 更改MenuMenuItem参考getSupportMenuInflater()。修改获取操作视图的方式。

    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 的信息!

注意:不幸的是,支持库无法以与 ABS 相同的方式为单元测试设置它。

输出:

在此处输入图像描述

致谢:加布里埃尔马里奥蒂

于 2013-08-12T09:37:53.590 回答
60

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

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

- 编辑 -

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

- 编辑 -

现在都使用了之后,我可以说我实际上更喜欢 ActionBarSherlock 到 Action Bar Compatibility。ActionBarSherlock 非常简单易用。

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

于 2011-10-21T03:15:24.350 回答
41

只是用一个实际的例子来完成@Kurtis Nusbaum 的内容。

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

我构建了两个简单的应用程序来展示 ActionBarSherlock 和 ActionBar Compatibility 之间的视觉差异。查看比较图像:

使用兼容性库的应用

使用 sherlock 库的应用程序

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

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

按下菜单上的应用程序使用 sherlock


如您所见,图像只是执行所说的内容。只有在您运行的设备是 API 级别 3.0 或更高版本时,操作栏兼容性才会为您提供操作栏。而夏洛克则更为笼统。

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

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

}

在 sherlock 应用程序上需要额外的配置:

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

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

于 2013-03-04T22:20:21.097 回答
39

Actionbar Sherlock 比简单的 Actionbar 兼容性项目更先进,也更雄心勃勃。

如果您只想在应用程序顶部添加一个操作栏,则操作栏兼容性可以被视为一个“示例”或一个很好的起点。

ActionBarSherlock 建立在兼容性库之上,并在 3.0 之前的设备上为您提供(如操作栏兼容性示例)一个操作栏。此外,它还具有 ActionBar Compat 代码中不存在的额外功能。这包括但不限于以下功能

  • setNavigationMode(用于操作栏中的选项卡和微调器)
  • 对话片段
  • 上下文操作栏 (CAB) 接管操作栏的菜单,例如用于多选 (http://developer.android.com/design/patterns/new-4-0.html) 这是 ICS 功能 ( !)为此,必须将 ActionMode 类的实现(在 API 级别 11 中引入)引入到 ActionbarSherlock 库中
  • Fragment 和 FragmentActivity 实现 - 因为 Fragment 可以实现 onCreateOptions 菜单,所以我们需要确保使用 SupportMenuInflater。
  • 两个主题与 Holo.Dark 和 Holo.Light (Theme.Sherlock, Theme.Sherlock.Light) 不太一样
  • ICS 功能“拆分操作栏”

我在使用 ActionbarSherlock 时看到的唯一缺点是您将自己锁定在该库中。如果由于某种原因它会在不久的将来消失,您将不得不自己维护它(例如,如果没有 Jellybean 实现出现)。这是一个麻烦(不是一个大问题),因为您的所有片段都扩展了 SherlockFragemnt 和您的所有活动。Sherlock 活动。

于 2012-05-22T13:48:42.433 回答
26

好吧,@Jake 的实现比 Actionbar compat 走得更远,更准确地说,Actionbar Compat 只是一个基本示例,说明如何通过 Honeycomb (API 13) 之前的版本支持所有具有伪操作栏的应用程序。虽然他们的目标是相同的交叉兼容操作栏,但他们有不同的方法。

ActionbarCompat 方法

此实现不使用兼容性 Android 支持库,而是创建一个名为ActionBarActivity的基类创建一个Helper的单个实例此帮助器充当工厂本身,它为 APIS 的三个部分返回不同的实现,它返回

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

动作条夏洛克

好吧,这很棘手,因为,我不是作者,也许 Jake 可以进一步解释这一点,但我会试一试。

就像 compat Sherlock 做了不同的实现,但一个是“Compat”,另一个是 Native。它迫使您从 SherlockActivity 或从 SherlockFragmentActivity 扩展,因为这两个基类具有调度 ActionBar 的方法。

这是一个庞大而复杂的项目,无法在一篇文章中解释。建议你在Sherlock Github repo周围挖掘一下,正如Jeff Atwood所说

在此处输入图像描述

于 2012-05-14T21:38:04.190 回答
10
  • 我坚信您应该将ActionBarCompat其用于所有想要支持旧设备的新项目。

  • 迁移现有项目也可能有意义。因此,请继续阅读以了解为什么应该立即迁移或使用 ActionBarCompat 以及如何迁移现有项目。

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

您应该更喜欢 ActionbarCompat 而不是 ActionbarSherlock 的原因有很多。

  1. 首先,这个项目是由谷歌开发的,是支持库的一部分,因此很可能会在谷歌发布带有库存 Android 的同时支持新的 Action Bar 相关内容。

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

  3. 最后也是重要的是,ActionBarSherlock 的创建者 Jake Wharton 在 Google+ 上宣布 ActionBarSherlock 的进一步开发已停止。ActionBarSherlock 4.4 是最后一个版本,可能会修复错误 - 但不会有任何新功能:因此,如果 actionbar 中包含新功能,您可能无法使用 actionbarsherlock 跟上它。

于 2014-07-30T13:15:55.717 回答
7

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

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

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

  • 随着 Action Bar API 的发展,可以保持更新。
  • 集成的祖先导航支持。
  • 使用框架 Menu 和 MenuItem 类。
  • 继续使用支持库的 Fragment 类。
  • 对与 DrawerLayout 一起使用的 ActionBarDrawerToggle 的集成支持。
  • PopupMenu 的后端。

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

于 2013-11-27T08:40:30.033 回答