ActionBarSherlock和ActionBar兼容性之间的区别

xDr*_*onZ 155 java android actionbarsherlock android-actionbar android-actionbar-compat

ActionBarSherlockAction Bar兼容性有什么区别

几天前谷歌刚刚发布了令我如此困惑的ActionBar兼容性.操作栏兼容性是否与ActionBarSherlock相同,编码是否相同?

示例:操作栏兼容性是否支持导航"up"或ActionBar.Tab的应用程序图标

LOG*_*TAG 113

ActionBarSherlock与ActionBarCompat:

我只是想在ActionBarSherlock和ActionBarCompat Lib之间放几个代码区别

 ActionBarSherlock与ActionBarCompat**强文**

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

脚步:

  1. 导入AppCompat项目.

  2. 替换SherlockFragmentActivityActionBarActivity.

  3. 替换SherlockFragmentFragment.

  4. 变化Menu,MenuItem以及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相同的方式为单元测试进行设置.

输出:

在此输入图像描述

致谢:Gabriele Mariotti


Kur*_*aum 61

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

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

- 编辑 -

事情似乎发生了变化,ActionBarSherlock与Action Bar兼容性之间实际上没有任何区别.请阅读以下评论以获取详细信息.

- 编辑 -

在使用了两者后,我可以说我实际上更喜欢ActionBarSherlock与Action Bar兼容性.ActionBarSherlock非常简单易用.

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

  • 此外,答案是完全错误的 - 兼容性示例的目的是支持3.0之前的设备. (35认同)
  • 谷歌发布了一个名为ActionBarCompat的新的向后兼容的Action Bar实现,它是支持库r18的一部分.ActionBarCompat API允许您在应用程序中构建基本的Action Bar设计模式,并具有与Android 2.1的广泛兼容性. (8认同)
  • 以下链接告诉您`why`和`how`使用新的ActionBarCompat API,http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html (3认同)
  • 只是补充一点,对于那些认为他们可能希望在他们的应用中集成Chromecast的人,我强烈建议使用appcompat库.Chromecast集成所需的MediaRouter API取决于appcompat; 无法使用ActionBarSherlock. (2认同)

Bru*_*eus 41

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

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

我构建了两个简单的应用程序来显示ActionBarSherlock和ActionBar兼容性之间的视觉差异.查看比较图像:

应用程序使用兼容库

使用sherlock库的应用程序

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

App按下菜单上的兼容性

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


正如您所看到的,图像只是强制执行所说的内容.只有当您运行的设备是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>
Run Code Online (Sandbox Code Playgroud)

兼容性活动:

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;
     }
}
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

在sherlock app上需要额外的配置:

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

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

  • 实际上,这并不完全正确.Compat库可以,并且确实为您提供了Gingerbread上的ActionBar实现.例如,这个应用程序给你一个AB的GB,不使用Sherlock而是使用Compat.https://play.google.com/store/apps/details?id=uk.co.mxdata.rootle (5认同)
  • 有了最新的android支持库(api 18),我看到他们已经内置了对actionbar的支持(称为ActionBarCompat类). (2认同)
  • 兼容性为你提供了Android 2.2上的ActionBar,我使用它,它的工作原理...... (2认同)

Gle*_*ech 39

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

如果您只想在应用程序顶部使用操作栏,则可以将操作栏兼容性视为"样本"或良好的起点.

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

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

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


Nec*_*net 26

那么@Jake实现比Actionbar compat更进一步,更精确的是Actionbar Compat只是一个基本的例子,说明如何使用伪动作条为Honeycomb之前的版本支持所有应用程序(API 13).虽然他们的目标是相同的交叉兼容操作栏,但他们有不同的方法.

ActionbarCompat Aproach

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

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

Action Bar Sherlock

嗯,这是一个棘手的第一,因为,我不是作者,也许杰克可以进一步解释这个,但我会试一试.

正如compock Sherlock做出不同的实现,但一个是"Compat",另一个是Native.它强制您从SherlockActivity或SherlockFragmentActivity扩展,因为这两个基类具有调度ActionBar的方法.

这是一个庞大而复杂的项目,无法在一篇文章中解释.建议你挖掘周围的Sherlock Github回购看看,杰夫阿特伍德

在此输入图像描述


Luf*_*ffy 10

  • 我坚信你应该ActionBarCompat用于所有想要支持旧设备的新项目.

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

为什么你应该比ActionBarSherlock更喜欢ActionBarCompat?

有很多原因可以让你更喜欢ActionbarCompat而不是ActionbarSherlock.

  1. 首先,这个项目由谷歌提供,是支持库的一部分,因此可能会支持新的Action Bar相关内容,同时Google会用Android版本发布它们.

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

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


rui*_*dge 7

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

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

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

  • 随着Action Bar API的发展,可以保持更新.
  • 综合祖先导航支持.
  • 使用框架Menu和MenuItem类.
  • 继续使用支持库的Fragment类.
  • ActionBarDrawerToggle的集成支持,用于DrawerLayout.
  • PopupMenu的Backport.

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