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的主要内容,如果未能解决你的问题,请参考以下文章