Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActionBar Sherlock和ActionBar兼容性之间的区别_Java_Android_Actionbarsherlock_Android Actionbar_Android Actionbar Compat - Fatal编程技术网

Java ActionBar Sherlock和ActionBar兼容性之间的区别

Java ActionBar Sherlock和ActionBar兼容性之间的区别,java,android,actionbarsherlock,android-actionbar,android-actionbar-compat,Java,Android,Actionbarsherlock,Android Actionbar,Android Actionbar Compat,和的区别是什么 几天前,谷歌刚刚发布了ActionBar兼容性,这让我很困惑。动作栏兼容性是否与动作栏Sherlock的工作原理相同,编码是否相同 示例:操作栏兼容性是否支持或ActionBar.Tab ActionBarSherlock为您的应用程序提供了一个操作栏,无论您的应用程序运行的是哪一版本的android API。操作栏兼容性仅当您运行的设备是API级别3.0或更高版本时,才为您提供操作栏 *请注意,如果您运行的设备不是3.0或更高版本,ActionBarSherlock将使用它自己

和的区别是什么

几天前,谷歌刚刚发布了ActionBar兼容性,这让我很困惑。动作栏兼容性是否与动作栏Sherlock的工作原理相同,编码是否相同


示例:操作栏兼容性是否支持或ActionBar.Tab

ActionBarSherlock为您的应用程序提供了一个操作栏,无论您的应用程序运行的是哪一版本的android API。操作栏兼容性仅当您运行的设备是API级别3.0或更高版本时,才为您提供操作栏

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

--编辑--

看起来事情已经改变了,ActionBarSherlock和ActionBar的兼容性实际上已经没有区别了。有关详细信息,请阅读下面的评论

--编辑--

在使用了两者之后,我可以说我实际上更喜欢ActionBarSherlock而不是ActionBar兼容性。ActionBarSherlock非常容易使用

--编辑--
正如LOG_标签所提到的,Android支持库中现在支持操作栏。我还没有机会使用它,但我想这是最好的使用方法。

Well@Jake实现比Actionbar Compatit更进一步,更准确地说,Actionbar Compatit只是一个基本示例,说明如何在蜂巢(API 13)之前的版本中使用伪Actionbar支持所有应用程序。虽然他们的目标是相同的跨兼容actionbar,但他们有不同的方法

ActionbarCompat Aproach

这个实现没有使用兼容Android支持库,而是创建了一个基类,名为create a single instance of a This helper act as factory,它返回三段API的不同实现

  • :用于蜂窝之前
  • :蜂窝式
  • :用于ICS基础设备
最有趣的部分在中,因为它有最重要的代码,我建议您理解这个类,您将获得整个示例

行动吧夏洛克

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

正如compat Sherlock使用不同的实现一样,一个用于“compat”,另一个用于本机。它强制您从SherlockActivity或SherlockFragmentActivity进行扩展,因为这两个基类具有调度ActionBar的方法

这是一个庞大而复杂的项目,无法用一篇文章来解释。建议你四处挖掘,看一看,就像上面说的那样


与简单的Actionbar兼容性项目相比,Actionbar Sherlock要先进得多,雄心勃勃得多

如果你只想在你的应用程序上加一个动作条,那么动作条的兼容性可以被认为是一个“示例”或一个很好的起点

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

  • setNavigationMode(用于操作栏中的选项卡和微调器)
  • 对话片段
  • 上下文操作栏(CAB)接管操作栏的菜单,例如用于多选(http://developer.android.com/design/patterns/new-4-0.html)这是一个ICS特性(!)为此,必须在ActionbarSherlock库中引入ActionMode类(在API级别11中引入)的实现
  • Fragment和FragmentActivity实现——因为fragments可以实现onCreateOptions菜单,所以我们需要确保使用SupportMenuInflater
  • 两个主题与全息。黑暗和全息。光明没什么不同(Theme.Sherlock,Theme.Sherlock.Light)
  • ICS具有“分割动作条”功能
我在使用ActionbarSherlock中看到的唯一缺点是,您将自己锁定在该库中。如果由于某种原因,它将在不久的将来消失,那么您必须自己维护它(例如,如果没有出现Jellybean实现)。这是一个麻烦(不是一个大问题),因为您的所有片段都扩展了SherlockFragemnt和您的所有活动。
Sherlock活动。

用一个实际的例子来完成@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;
     }
}
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应用程序上需要额外的配置:

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

ActionBarSherlock vs ActionBarCompat:

我只想在ActionBarSherlock和ActionBarCompat Lib之间添加一些代码差异

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

步骤:

  • 导入AppCompat项目

  • 更换
    SherlockFragmentActivity