ActionBar pre Honeycomb

Posted

技术标签:

【中文标题】ActionBar pre Honeycomb【英文标题】: 【发布时间】:2011-10-02 12:51:10 【问题描述】:

我正在为 android (2.1 > 3.1) 编写一个应用程序,我想使用熟悉的做法,即在 Honeycomb 应用程序中使用应用程序图标来进入家庭活动,但是,当我之前运行活动时, Activity.getActionBar(); 的非 Honeycomb 设备;方法尚不存在,应用强制关闭,如果设备正在运行蜂窝,如何才能只运行此指定代码?

@Override
protected void onStart() 
    super.onStart();
    ActionBar actionBar = this.getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

感谢您的帮助,祝您有愉快的一天。

【问题讨论】:

【参考方案1】:

我已经为 Android 编写了一个库,它会使用自定义实现的操作栏设计模式自动包装您的 3.0 之前的活动。然后,您可以调用 getSupportActionBar(),它将为原生和自定义实现提供一个通用接口,具体取决于您的应用程序在哪个版本的 Android 上运行。

该库还允许您通过单个主题将自定义样式应用于这两个操作栏。

您可以在actionbarsherlock.com 找到更多信息以及示例应用程序的屏幕截图。

该库是 100% 开源的,可在 github.com/JakeWharton/ActionBarSherlock 获取。

【讨论】:

如果我使用的不是 SherlockActivity 或简单的 Activity,而是不支持 sherlock 和 getSupportActionBar() 的 MapsActivity 怎么办? Google 现已提供a better solution @JakeWharton 好像他们已经复制了你的库.. 仍然坚持使用你的库,很棒的工作我仍然在使用它与我创建和创建的每个应用程序。【参考方案2】:

Android pre-Honeycomb 没有 ActionBar,因此任何与 actionBar 有关的方法都会失败。您应该看一下code from the Google IO app,它对 Honeycomb 和 pre-Honeycomb 都使用了 ActionBar。

简而言之,它不会单独运行,您必须包含自己的 ActionBar 代码。

【讨论】:

【参考方案3】:

Action Bar 的 API 指南中写道:

Action Bar Compatibility 示例应用提供了一个 API 层和操作栏布局,允许您的应用使用一些 ActionBar API,并通过将传统的标题栏替换为自定义操作栏布局来支持旧版本的 Android。

您可以通过installing Android 4.1 (API 16) 示例获取此信息。

然后在 Eclipse 中:

    转到文件 > 新建 > 项目 Android > Android 示例项目 检查 Android 4.1 选择 ActionBarCompat

【讨论】:

ActionBarCompat 项目没有 setDisplayHomeAsUpEnabled @IgorGanapolsky 是的,确实如此,我在我的项目中使用它:getSupportActionBar().setDisplayHomeAsUpEnabled(true);【参考方案4】:

由于前蜂窝上不存在操作栏,您将不得不使用其他东西。 一个建议是使用 johannilssons 操作栏库,该库可以在 github 上找到。 直接链接:https://github.com/johannilsson/android-actionbar

【讨论】:

这不能正常工作....下载提供的示例有错误...【参考方案5】:

我喜欢使用 GreenDroids 操作栏(另外还包括一些其他漂亮的东西):http://android.cyrilmottier.com/?p=240

【讨论】:

【参考方案6】:

从修订版 18 开始,Android Support library 包含回到 API 级别 7 的 ActionBar 支持。现在,这是为 2.1 以上的所有 Android 版本支持 ActionBar 的推荐方式,并且比第三方库或其他库更容易使用黑客。

【讨论】:

【参考方案7】:

我认为代码是不言自明的

private static int sdkVersion;
 static 
 
    try 
      sdkVersion = Integer.parseInt(android.os.Build.VERSION.SDK);
     catch (Exception ex) 
    
  

  /** Device support the froyo (Android 2.2) APIs */
  public static boolean isAndroid22() 
    return sdkVersion >= 8;
  

  /** Device support the Gingerbread (Android 2.3) APIs */
  public static boolean isAndroid23() 
    return sdkVersion >= 9;
  

  /** Device supports the Honeycomb (Android 3.0) APIs */
  public static boolean isAndroid30() 
    return sdkVersion >= 11;
  

【讨论】:

以上是关于ActionBar pre Honeycomb的主要内容,如果未能解决你的问题,请参考以下文章

android 为啥没有actionbar

自定义ActionBar

ActionBar

ActionBar最全详解

删除ActionBar字幕/重置ActionBar文本

Android 实现ActionBar定制