ActionBar pre Honeycomb

12

我正在编写一个适用于 Android (2.1 > 3.1) 的应用程序,并且我想使用在 Honeycomb 应用程序中使用应用程序图标返回到主活动的惯用做法,但是,当我在早期、还没有 Activity.getActionBar() 方法的非 Honeycomb 设备上运行活动时,应用程序会强制关闭。如何只在设备运行 Honeycomb 时才运行此指定代码?

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

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

7个回答

67

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

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

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

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


如果我使用的不是SherlockActivity或简单的Activity,而是MapsActivity,它不支持sherlock和getSupportActionBar()怎么办? - Csabi
谷歌现在提供了更好的解决方案 - Jannie Theunissen
@JakeWharton 看起来他们复制了你的库...不过我还是坚持使用你的,非常棒!我在创建每个应用程序时都在使用它。 - user2742371

12

Android在Honeycomb版本之前没有ActionBar,所以任何涉及到actionBar的方法都会失败。你应该查看来自Google IO app的代码,它在Honeycomb和pre-Honeycomb中都使用了ActionBar。

简单地说,它本身无法工作,你需要包含自己的ActionBar代码。


4
操作栏(Action Bar)API指南中,它说:
操作栏兼容性示例应用程序提供了一个API层和操作栏布局,允许您的应用程序使用一些操作栏API,并通过将传统标题栏替换为自定义操作栏布局来支持旧版本的Android。
您可以通过安装Android 4.1 (API 16)示例获取此功能。
然后在Eclipse中:
  1. 转到文件 > 新建 > 项目
  2. Android > Android示例项目
  3. 检查Android 4.1
  4. 选择ActionBarCompat

1
ActionBarCompat项目没有设置setDisplayHomeAsUpEnabled。 - IgorGanapolsky
1
@IgorGanapolsky 是的,它可以,我在我的项目中已经让它工作了:getSupportActionBar().setDisplayHomeAsUpEnabled(true); - Kyle Falconer

3

那不像应该的那样工作...下载附带的示例有错误... - Amit

3

3

从第18版开始,Android Support库已经包含了支持ActionBar的API Level 7。这是现在推荐的支持ActionBar的方法,适用于Android 2.1及以上的所有版本,并且比第三方库或其他黑科技更容易使用。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接