最近一个星期被 actionsherlock 搞得很不爽(光去足疗店就去了三次——减压),本来觉得应该不太会难啊(Android 已经基本入门),毕竟编程(虽然我是搞 .NET 的,但 Java 跟 .NET 有 90% 的相似度,虽然没用 Java 做过项目,但也不至于对 Java 什么都不懂……)也有年头了,可看了些资料和示例后,自我感觉,简单搞一下还行,但达到做项目的程度,还是复杂了点,到现在都没能体会~
看来啊,还是在官网系统地看写资料从头来过吧。近期想自己写个 Android APP,若不用 actionsherlock,貌似起点低了点啊,呵呵~
与官方兼容库的主题粘合在一起的 ActionBarSherlock,目的是让用户可以使用操作栏的设计方式,这种方式是在 Android Ice Cream Sandwich 中积累的经验。在此之前,顶部操作栏的设计还是比较麻烦的,通常是由四个部分组成,如下图 1 所示,从左到右,分别为应用图标、视图控制、操作按钮和更多操作,都需要自己弄,而且每个开发者对操作栏的设计可能不同,ActionBarSherlock 恰恰就是简化和规范操作栏的设计和实现。
图 1 Android 操作栏设计
Android Ice Cream Sandwich 是 Android 继 Froyo 后的下一个版本。因为,Android 系统版本混乱的局面一直困扰着 Android 开发者,Ice Cream Sandwich 解决两个问题:碎片(Fragment)设计,可以让应用在小屏幕上使用单个面板布局,在大屏幕上使用多个面板布局;帮助开发者驾驭不同尺寸的屏幕。
什么是 actionsherlock?事实上,actionsherlock 根据之前对操作栏设计和实践经验,在原生 Android 的基础上,封装的一个库,为了便于识别和使用,它在包名,及其内部大量的类等在命名和位置上都与原生的 Android 相匹配。
要求
由于 actionsherlock 使用了原生的操作栏(action bar)及其 Ice Cream Sandwich 的相关类,所以该库要求你必须使用 Android 4.0 或更高的版本来编译 actionsherlock 和你的项目。另外,也需要采用 JDK 1.6。
因为 actionsherlock 库是官方库的扩展,因此,你必须在你项目中引用 android-support-v4.jar。
如何包含在你的项目中
如果你使用 ADT 插件版本 0.9.7 或更高的 Eclipse 开发环境,那么你就可以把 ActionBarSherlock 引入到你的项目。
Create a new Android project in Eclipse using the actionbarsherlock/ folder as the existing source. Then, in your project properties, add the created project under the ‘Libraries’ section of the ‘Android’ category.
其他方式包括使用 ant 从命令行编译,以及使用 maven 或 gradle 生成你的 Android 项目,请参看“ActionBarSherlock 官网”。
Action Bar API
当创建一个 activity 在所有 Android 版本中使用操作栏,你必须声明你的 activity 继承以“Sherlock”开头的任何一个类(例如,SherlockActivity,SherlockFragmentActivity)。与操作栏的交互是通过调用 getSupportActionBar()(而不是 getActionBar())。
由 ActionBar 实例公开的 API 是原生方法(native method) 公开的一个完全的副本。在“Related Links”小节,参阅其文档,以及如何使用它。
注意: 当使用 SherlockFragmentActivity 时,也要使用“Sherlock-”前缀开头的 fragment 类,这样才能确保正确的功能(例如,SherlockFragment、SherlockListFragment)。该 activity 仍然与正常的 fragment 类功能一样,但你将不能使用任何的菜单相关的方法。
必要的主题化
因为该操作栏部件非常复杂,它需要一套默认的主题。该库提供三个核心的主题——其中任何一个都必须被应用到每个你需要操作栏存在的 Activity 上。
更多地请参考“主题化”。
引用
为了使用操作栏的功能,必须在 Android 3.0 以上的版本,该库包含并使用的大量的类,与原生 Android 的包名相对应。最常见的是:
- com.actionbarsherlock.app.ActionBar
- com.actionbarsherlock.view.Menu
- com.actionbarsherlock.view.MenuItem
- com.actionbarsherlock.view.MenuInflater
例如,com.actionbarsherlock.app.ActionBar 与 com.android.app.ActionBar 对应。
加入这些包才能确保你适当使用这些类型,以及额外的功能。
注意:大多数对于从 activity @Override 方法的错误都是由于错误 import 的结果。所有在 com.actionbarsherlock.* 包中类,它们的名字和位置都与原生类相匹配。
注意:为了从 XML 文件 inflate 你的菜单,你应该在你的 activitie 中调用 getSupportMenuInflater() 方法。fragment 回调会准备 inflater 的一个实例作为参数。最近我就犯了这个错误,eclipse 报了个 inflateException,看到这句话我才明白。