ActionBarSherlock和Action Bar 兼容性有什么区别
几天前,谷歌刚刚发布了让我很困惑的 ActionBar 兼容性。Action Bar Compatibility 是否与 ActionBarSherlock 的工作方式相同并且编码是否相同?
示例: Action Bar Compatibility 中是否支持“向上”导航的应用程序图标或 ActionBar.Tab?
ActionBarSherlock和Action Bar 兼容性有什么区别
几天前,谷歌刚刚发布了让我很困惑的 ActionBar 兼容性。Action Bar Compatibility 是否与 ActionBarSherlock 的工作方式相同并且编码是否相同?
示例: Action Bar Compatibility 中是否支持“向上”导航的应用程序图标或 ActionBar.Tab?
ActionBarSherlock 与 ActionBarCompat:
我只想在 ActionBarSherlock 与 ActionBarCompat Lib 之间放置一些代码差异
我们可以将一些应用从 ActionBarSherlock 迁移到 ActionBarCompat:
脚步:
导入AppCompat项目。
替换SherlockFragmentActivity
为ActionBarActivity
。
替换SherlockFragment
为Fragment
。
更改Menu
和MenuItem
参考getSupportMenuInflater()
。修改获取操作视图的方式。
mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)
有关更多信息,请参阅+NickButcher (Google)提供的此幻灯片
感谢来源: http: //gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/
不要忘记阅读这个developer.android了解更多关于 ABC 的信息!
注意:不幸的是,支持库无法以与 ABS 相同的方式为单元测试设置它。
输出:
致谢:加布里埃尔马里奥蒂
无论您的应用程序在哪个版本的 Android API 上运行,ActionBarSherlock 都会为您的应用程序提供一个操作栏。只有在您运行的设备是 API 级别 3.0 或更高版本时,操作栏兼容性才会为您提供操作栏。
*请注意,如果您运行的设备不是 3.0 或更高版本,ActionBarSherlock 将使用它自己的自定义操作栏实现,而不是原生的。
- 编辑 -
看起来事情已经发生了变化,实际上 ActionBarSherlock 和 Action Bar Compatibility 之间没有区别了。请阅读下面的评论以获取详细信息。
- 编辑 -
现在都使用了之后,我可以说我实际上更喜欢 ActionBarSherlock 到 Action Bar Compatibility。ActionBarSherlock 非常简单易用。
--EDIT-- 正如 LOG_TAG 所提到的,Android 支持库中现在支持操作栏。我还没有机会使用它,但我想这是最好用的。
只是用一个实际的例子来完成@Kurtis Nusbaum 的内容。
更新:正如@rudy-s 所说,使用最新的 android 支持库(api 18),我看到他们已经内置了对 actionbar 的支持(称为 ActionBarCompat 类)。
我构建了两个简单的应用程序来展示 ActionBarSherlock 和 ActionBar Compatibility 之间的视觉差异。查看比较图像:
现在按下菜单按钮时的外观:
如您所见,图像只是执行所说的内容。只有在您运行的设备是 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 类)。
Actionbar Sherlock 比简单的 Actionbar 兼容性项目更先进,也更雄心勃勃。
如果您只想在应用程序顶部添加一个操作栏,则操作栏兼容性可以被视为一个“示例”或一个很好的起点。
ActionBarSherlock 建立在兼容性库之上,并在 3.0 之前的设备上为您提供(如操作栏兼容性示例)一个操作栏。此外,它还具有 ActionBar Compat 代码中不存在的额外功能。这包括但不限于以下功能
我在使用 ActionbarSherlock 时看到的唯一缺点是您将自己锁定在该库中。如果由于某种原因它会在不久的将来消失,您将不得不自己维护它(例如,如果没有 Jellybean 实现出现)。这是一个麻烦(不是一个大问题),因为您的所有片段都扩展了 SherlockFragemnt 和您的所有活动。Sherlock 活动。
好吧,@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所说
我坚信您应该将ActionBarCompat
其用于所有想要支持旧设备的新项目。
迁移现有项目也可能有意义。因此,请继续阅读以了解为什么应该立即迁移或使用 ActionBarCompat 以及如何迁移现有项目。
为什么你应该更喜欢 ActionBarCompat 而不是 ActionBarSherlock?
您应该更喜欢 ActionbarCompat 而不是 ActionbarSherlock 的原因有很多。
首先,这个项目是由谷歌开发的,是支持库的一部分,因此很可能会在谷歌发布带有库存 Android 的同时支持新的 Action Bar 相关内容。
另一个很好的理由是它支持Navigation Drawer
pattern
开箱即用,而 ActionBarSherlock 不支持。因此,如果您想将此抽屉添加到现有项目/应用程序中,您应该迁移。
最后也是重要的是,ActionBarSherlock 的创建者 Jake Wharton 在 Google+ 上宣布 ActionBarSherlock 的进一步开发已停止。ActionBarSherlock 4.4 是最后一个版本,可能会修复错误 - 但不会有任何新功能:因此,如果 actionbar 中包含新功能,您可能无法使用 actionbarsherlock 跟上它。
也许我们应该更新答案,因为谷歌自API18以来发布了官方的 Actionbar 支持?
下面的块来自关于这两个库的官方博客:
如果您使用的是第三方解决方案(例如 ActionBarSherlock),有几个原因需要考虑升级:
- 随着 Action Bar API 的发展,可以保持更新。
- 集成的祖先导航支持。
- 使用框架 Menu 和 MenuItem 类。
- 继续使用支持库的 Fragment 类。
- 对与 DrawerLayout 一起使用的 ActionBarDrawerToggle 的集成支持。
- PopupMenu 的后端。
ActionBarSherlock 是一个可靠且经过良好测试的库,长期以来为开发人员提供了很好的服务。如果您已经在使用它并且当前不需要上述任何内容,则无需迁移。