ActionBarSherlock和Action Bar Compatibility
之间有什么区别?几天前谷歌刚刚发布了令我如此困惑的ActionBar兼容性。操作栏兼容性是否与ActionBarSherlock相同,编码是否相同?
示例:操作栏兼容性是否支持app icon to navigate "up"或ActionBar.Tab?
答案 0 :(得分:113)
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相同的方式设置单元测试。
输出:
致谢:Gabriele Mariotti
答案 1 :(得分:61)
ActionBarSherlock为您的应用程序提供了一个操作栏,无论您的应用程序运行的是什么版本的Android API。只有当您运行的设备是API级别3.0或更高版本时,操作栏兼容性才会为您提供操作栏。
*请注意,如果您运行的设备不是3.0或更高版本,ActionBarSherlock将使用它自己的操作栏自定义实现,而不是本机实现。
- 编辑 -
似乎事情已经发生了变化,ActionBarSherlock和Action Bar兼容性之间实际上没有任何区别。请阅读以下评论以获取详细信息。
- 编辑 -
现在使用了两者之后,我可以说我实际上更喜欢ActionBarSherlock与Action Bar兼容性。 ActionBarSherlock非常简单易用。
- EDIT-- 正如LOG_TAG所述,现在支持Android支持库中的操作栏。我还没有机会使用它,但我认为这是最好用的。
答案 2 :(得分:41)
用一个实际的例子来完成@Kurtis Nusbaum。
更新:正如@ rudy-s所说,使用最新的Android支持库(api 18),我看到他们已经内置了对actionbar的支持(称为ActionBarCompat类)。
我构建了两个简单的应用程序来显示ActionBarSherlock和ActionBar兼容性之间的视觉差异。查看比较图像:
现在按下菜单按钮时的外观:
正如您所看到的,图像只是强制执行所说的内容。 仅当您运行的设备是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应用程序需要额外的配置:
<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
更新: 正如@ rudy-s所说,使用最新的android支持库(api 18),我看到他们已经内置了对actionbar的支持(称为ActionBarCompat类)。
答案 3 :(得分:39)
Actionbar Sherlock比简单的Actionbar兼容性项目更先进,更雄心勃勃。
如果您只想在应用程序顶部使用操作栏,可以将操作栏兼容性视为“样本”或良好的起点。
ActionBarSherlock建立在兼容性库的基础上,并为您(如操作栏兼容性示例)提供3.0之前设备上的Action Bar。此外,它还具有ActionBar Compat代码中不存在的额外功能。这包括但不限于
等功能我在使用ActionbarSherlock时遇到的唯一缺点是你自己锁定了那个库。如果由于某种原因它会在不久的将来消失,你将不得不自己维护它(例如,如果没有Jellybean实现)。这是一个麻烦(不是一个大问题),因为你的所有片段都扩展了SherlockFragemnt和你的所有活动。 SherlockActivity。
答案 4 :(得分:26)
@Jake实现远比Actionbar compat更进一步,更准确地说,Actionbar Compat只是一个基本的例子,说明如何使用伪动作栏为Honeycomb之前的版本支持所有应用程序(API 13)。虽然他们的目标是相同的交叉兼容操作栏,但他们有不同的方法。
ActionbarCompat Aproach
此实现不使用兼容性Android支持库,而是创建一个名为ActionBarActivity的基类创建一个Helper的单个实例,这个帮助器充当工厂本身,返回三个不同的实现APIS的一部分,它返回
最有趣的部分是ActionbarBaseHelper,因为它有最重要的代码,我建议你理解这个类,你会得到完整的例子。
Action Bar Sherlock
嗯,这很棘手,因为,我不是作者,也许杰克可以进一步解释这个,但我会试一试。
就像compat Sherlock做出不同的实现一样,但一个是“Compat”,另一个是Native。它强制您从SherlockActivity或SherlockFragmentActivity扩展,因为这两个基类具有调度ActionBar的方法。
这是一个庞大而复杂的项目,无法在一篇文章中解释。建议你挖掘Sherlock Github repo,看看Jeff Atwood说
答案 5 :(得分:10)
我坚信你应该使用ActionBarCompat
来表示所有新内容
想要支持旧设备的项目。
迁移现有项目也可能有意义。所以请继续阅读 了解为什么要立即迁移或使用ActionBarCompat 如何迁移现有项目。
为什么你应该比ActionBarSherlock更喜欢ActionBarCompat?
有很多原因可以让你更喜欢ActionbarCompat而不是ActionbarSherlock。
首先,这个项目由Google提供,是支持的一部分 图书馆因此可能会支持新的Action Bar相关内容 谷歌同时发布Android版本。
另一个很好的理由是它支持Navigation Drawer
pattern
开箱即用,而ActionBarSherlock则不支持。从而
如果你想将这个抽屉添加到现有的项目/应用程序,你应该
迁移。
最后和重要的是,ActionBarSherlock的创建者, 杰克沃顿在Google+上宣布进一步发展 ActionBarSherlock已停止。 ActionBarSherlock 4.4是 最新版本可能会修复错误 - 但不会有任何新的错误 功能:如果动作栏中包含新功能,您可以 使用actionbarsherlock无法跟上它。
答案 6 :(得分:7)
也许我们应该更新答案,因为google发布了自API18后的官方Actionbar支持?
下面的块来自offical blog这两个库:
如果您使用的是第三方解决方案(例如ActionBarSherlock),则有几个原因需要考虑升级:
- 随着Action Bar API的发展,可以保持更新。
- 集成祖先导航支持。
- 使用框架Menu和MenuItem类。
- 继续使用支持库的Fragment类。
- ActionBarDrawerToggle的集成支持,用于DrawerLayout。
- PopupMenu的Backport。
ActionBarSherlock是一个经过良好测试的可靠库,长期以来为开发人员提供了很好的服务。如果您已经在使用它并且目前不需要上述任何一项,则无需迁移。