ActionBarSherlock和Action Bar兼容性有什么区别
几天前,Google刚刚发布了ActionBar兼容性,这让我非常困惑。动作栏兼容性是否与ActionBarSherlock相同,并且编码是否相同?
示例:“动作栏兼容性”是否支持应用程序图标“向上”导航或ActionBar.Tab?
ActionBarSherlock和Action Bar兼容性有什么区别
几天前,Google刚刚发布了ActionBar兼容性,这让我非常困惑。动作栏兼容性是否与ActionBarSherlock相同,并且编码是否相同?
示例:“动作栏兼容性”是否支持应用程序图标“向上”导航或ActionBar.Tab?
Answers:
无论您在哪个版本的android API上运行,ActionBarSherlock都会为您的应用程序提供一个操作栏。仅当运行的设备是API级别3.0或更高级别时,操作栏兼容性才提供操作栏。
*请注意,如果您所运行的设备不是3.0或更高版本,则ActionBarSherlock将使用其自己的操作栏自定义实现,而不是本机。
- 编辑 -
看来情况已经变了,ActionBarSherlock和Action Bar兼容性之间实际上没有任何区别。请阅读下面的评论以获取详细信息。
- 编辑 -
现在已经使用了两者,可以说我实际上更喜欢ActionBarSherlock而不是Action Bar Compatibility。ActionBarSherlock确实非常易于使用。
-编辑-如LOG_TAG所述,Android支持库中现在支持操作栏。我还没有机会使用它,但是我想那是最好的使用方法。
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
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
而不必是库项目。
只需用一个实际的例子来完成@Kurtis Nusbaum。
更新:正如@ rudy-s所说,使用最新的android支持库(api 18),我看到它们已经对actionbar内置了支持(称为ActionBarCompat类)。
我构建了两个简单的应用程序来显示ActionBarSherlock和ActionBar兼容性之间的视觉差异。查看比较图像:
现在按下菜单按钮时的外观:
如您所见,这些图像仅能执行所说的内容。操作栏兼容性仅在运行的设备是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;
}
}
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类)。
与简单的Actionbar兼容性项目相比,Actionbar Sherlock更加先进和雄心勃勃。
如果您只想在应用程序顶部使用操作栏,则可以将操作栏兼容性视为“示例”或一个好的起点。
ActionBarSherlock建立在兼容性库上,并为您(如动作栏兼容性示例)在3.0之前的设备上提供了一个动作栏。此外,它还具有ActionBar Compat代码中没有的其他功能。这包括但不限于以下功能
我在使用ActionbarSherlock时看到的唯一缺点是,您将自己锁定在该库中。如果由于某种原因它会在不久的将来消失,那么您必须自己维护它(例如,如果没有Jellybean实现的话)。这是一个麻烦(不是很大的问题),因为您的所有片段都扩展了SherlockFragemnt和所有活动。SherlockActivity。
@Jake的实现远比Actionbar兼容的要精确得多,更准确地说,Actionbar Compat只是一个基本示例,说明如何使用Honeycomb(API 13)之前的版本的伪Actionbar支持所有应用。尽管他们的目标是相同的交叉兼容操作栏,但他们有不同的方法。
ActionbarCompat方法
此实现不使用Compatibility Android支持库,而是创建一个名为ActionBarActivity的基类,创建一个Helper的单个实例,此helper充当工厂本身,为APIS的三个部分返回不同的实现,并返回
最有趣的部分是ActionbarBaseHelper,因为它具有最重要的代码,我建议您了解此类,您将获得完整的示例。
动作酒吧夏洛克
好吧,这首先是棘手的,因为我不是作者,也许杰克可以进一步解释这一点,但是我会尝试一下。
正如Compat Sherlock的实现方式不同,一个是“ Compat”的,另一个是Native的。它迫使您从SherlockActivity或SherlockFragmentActivity进行扩展,因为这两个基类具有分派ActionBar的方法。
这是一个庞大而复杂的项目,无法在单个帖子中进行解释。建议您深入探究Sherlock Github仓库,看看Jeff Atwood所说的
我坚信您应该将ActionBarCompat
所有支持旧设备的新项目使用。
迁移现有项目可能也很有意义。因此,请继续阅读以了解为什么您应该立即迁移或使用ActionBarCompat以及如何迁移现有项目。
为什么与ActionBarSherlock相比,您应该更喜欢ActionBarCompat?
有许多原因使您应该首选ActionbarCompat而不是ActionbarSherlock。
首先,该项目由Google负责,是支持库的一部分,因此可能会在Google发行带有Android的库存的同时支持与Action Bar相关的新内容。
另一个很好的理由是它支持Navigation Drawer
pattern
开箱即用的权利,而ActionBarSherlock不支持。因此,如果要将这个抽屉添加到现有项目/应用程序中,则应进行迁移。
最后也是重要的一点是,ActionBarSherlock的创建者Jake Wharton在Google+上宣布,ActionBarSherlock的进一步开发已停止。ActionBarSherlock 4.4是最新版本,可能会修复一些错误-但不会有任何新功能:因此,如果actionbar中包含新功能,则您可能无法与actionbarsherlock保持同步。
也许我们应该更新答案,因为Google自API18以来就发布了正式的Actionbar支持?
下面的块来自有关这两个库的官方博客:
如果您使用的是第三方解决方案(例如ActionBarSherlock),则有几个考虑升级的理由:
- 可以随着Action Bar API的发展而保持更新。
- 集成的祖先导航支持。
- 使用框架的Menu和MenuItem类。
- 继续使用支持库的Fragment类。
- 对与DrawerLayout一起使用的ActionBarDrawerToggle的集成支持。
- PopupMenu的反向端口。
ActionBarSherlock是一个经过测试的可靠库,长期以来一直为开发人员提供良好的服务。如果您已经在使用它,并且当前不需要上述任何一项,则无需迁移。