12

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

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

感谢您的帮助,祝您有美好的一天。

4

7 回答 7

67

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

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

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

该库是 100% 开源的,可从github.com/JakeWharton/ActionBarSherlock 获得

于 2011-07-11T12:08:24.417 回答
12

Android pre-Honeycomb 没有 ActionBar,因此任何有关 actionBar 的方法都会失败。您应该查看Google IO 应用程序中的代码,该应用程序对 Honeycomb 和 pre-Honeycomb 都使用了 ActionBar。

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

于 2011-07-11T05:41:20.830 回答
4

从操作栏的 API 指南中它说:

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

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

然后在 Eclipse 中:

  1. 转到文件 > 新建 > 项目
  2. Android > Android 示例项目
  3. 检查安卓 4.1
  4. 选择 ActionBarCompat
于 2012-07-25T05:23:04.573 回答
3

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

于 2011-07-11T05:48:05.260 回答
3

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

于 2011-07-11T05:55:09.307 回答
3

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

于 2013-08-28T01:45:51.073 回答
2

我认为代码是不言自明的

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;
  }
于 2011-07-11T05:47:01.720 回答