Android 关于 ActionBarSherlock 的使用
本文内容
- 使用
- 主题化
- ActionBarSherlock 演示项目
- 本文 ActionBarSherlock 简单演示
最近一个星期被 actionsherlock 搞得很不爽(光去足疗店就去了三次——减压),本来觉得应该不太会难啊(Android 已经基本入门),毕竟编程也有年头了(虽说我是搞 .NET C# 的,但 Java 跟 C# 有 90% 的相似度,微软搞 C# 的人,就是当初搞 Java 的人,C# 在 1.0 版本时的确很烂,直到 2.0 版本才大为改观。我没用 Java 做过项目,但也不至于对 Java 一无所知……),可搜索了一些资料和示例后,感觉,简单搞一下还行,但要达到做项目的程度,还是复杂了点,到现在都没能领会 ActionBarSherlock~
看来啊,还是在官网系统地看些资料从头来过吧。近期想自己写个 Android APP,若不用 ActionBarSherlock,貌似起点低了点啊~ActionBarSherlock 目前已经集成在 eclipse ADT 中,但据网上资料,若在 Android 4.0 以下的手机上使用 ActionBarSherlock ,比如我的真机是 Android 2.2.2,需要直接将 ActionBarSherlock 作为库加入到自己项目中(或是其 .jar 包)。
什么是 ActionBarSherlock?说白了,ActionBarSherlock 就是根据之前对操作栏设计和实践经验,在原生 Android 基础上扩展的一个库,为了便于使用,它在包名及其内部大量的类等在命名和位置上都与原生的 Android 相匹配。个人觉得,既然 ActionBarSherlock 是在原生 Android 基础上进行的一个增强的扩展,原生 Android 有的,ActionBarSherlock 也有,ActionBarSherlock 还有原生 Andorid 所有没有的,相当不错,那么要用 ActionBarSherlock,就用的彻底点,比如,自己的 Activity 和 Fragment 继承“Sherlock-”开头的类,别掺合着用,这样能减少错误的概率。而且掺合用,主题也不一致啊~在使用 ActionBarSherlock 之前,最好先看下原生 Android ActionBar 是如何使用。
Github 下载
本文简单演示下载
使用
与官方兼容库的主题粘合在一起的 ActionBarSherlock,目的是让用户可以使用操作栏的设计方式,该方式是在 Android Ice Cream Sandwich(Android 4.0) 中积累的经验。
在此之前,顶部操作栏的设计还是比较麻烦的,通常由四个部分组成,如下图 1 所示,从左到右,分别为“应用图标”、“视图控制”、“操作按钮”和“更多操作”,都需要自己弄,而且每个开发者对操作栏的设计可能不同,ActionBarSherlock 恰恰就是简化和规范操作栏的设计和实现。一句话,实践证明的、成熟的东西就要封装并强化成现成的东西。
图 1 Android 操作栏设计
Android Ice Cream Sandwich 是继 Froyo 后的下一个版本。因为,Android 系统版本混乱的局面一直困扰着 Android 开发者,Ice Cream Sandwich 解决两个问题:碎片(Fragment)设计,可以让应用在小屏幕上使用单个面板布局,在大屏幕上使用多个面板布局;帮助开发者驾驭不同尺寸的屏幕。
Android 4.0 Ice Cream Sandwich 冰欺凌三明治,Android 2.2 Froyo(缩写“frozen yogurt”),意为“冻酸奶”。Google 此前的一些版本还用过 Android 1.5 Cupcakes(杯形蛋糕)、Android 1.6 Donuts(甜甜圈)、Android 2.0/2.1 Eclairs(长形松饼)。另外,Android 2.3 Gingerbread(姜饼)、Android 3.0/3.1/3.2 Honeycomb(蜂窝)、Android 4.1/4.2/4.3 Jelly Bean(果冻豆)、Android 4.4 KitKat(奇巧巧克力棒)。命名遵循首字母 C、D、E、F ……顺序,还几乎都是吃的,难道 Google Andriod 的人都是吃货吗~
要求
由于 actionsherlock 使用了原生的操作栏(action bar)及其 Ice Cream Sandwich 的相关类,所以该库要求你必须使用 Android 4.0 或更高的版本来编译 actionsherlock 和你的项目。另外,也需要采用 JDK 1.6 或更高。
因为,actionsherlock 库是官方库的扩展,所以,必须在你项目中引用 android-support-v4.jar。
如何包含在你的项目
如果你使用 ADT 插件 0.9.7 版本或更高的 Eclipse 开发环境,那么你就可以把 ActionBarSherlock 引入到你的项目。
在 eclipse 中,利用现存的 actionbarsherlock/,创建一个新的 Android 项目。然后,右键点击你的项目“属性”,选择“Android”-“Library”,把 actionbarsherlock 项目作为库添加你的项目内。如图 2 所示:
图 2 将 actionbarsherlock 添加到你项目
其他方式包括使用 ant 从命令行编译,以及使用 maven 或 gradle 生成你的 Android 项目,请参看“ActionBarSherlock 官网”。
将 actionbarsherlock 库添加到你的项目后,可能会出现如下图所示的错误信息:
图 3 将 actionbarsherlock 添加到你项目后,可能出现的问题
这个错误信息的大概意思是,你新建的项目 mydemo 中的 android-support-v4.jar 与 actionbarsherlock 库中的不匹配,让你修复依赖。这个是完全有可能的,因为,eclipse ADT 的版本可能不一样,android-support-v4.jar 自然不同。只要将你的项目 mydemo/libs/android-support-v4.jar 覆盖到 actionbarsherlock/libs/android-support-v4.jar 就行。
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
加入这些包才能确保你适当使用这些类型,以及额外的功能。
注意:大多数对于从 activity 的 @Override 方法的错误,都是由于错误地 import 的结果。所有在 com.actionbarsherlock.* 包中类,它们的名字和位置都与原生的类相匹配。例如,com.actionbarsherlock.app.ActionBar 与 com.android.app.ActionBar 相对应。
注意:为了从 XML 文件 inflate 你的菜单,应该在你的 activitie 中调用 getSupportMenuInflater() 方法。fragment 回调会准备 inflater 的一个实例作为参数。最近我就犯了这个错误,eclipse 报了个 inflateException,看到这句话我才明白。
主题化
工作在所有设备上的操作栏的主题化都是非常直接和简单的过程。你应该遵循现存主题化的建议,以便做些小的改动来自定义原生的操作栏。
在“Demos”示例项目里的“Styled”,是一个自定义操作栏的示例。
Parent Themes
为了自定义操作栏,以实现你的应用程序,必须使用 Theme.Sherlock,Theme.Sherlock.Light,或 Theme.Sherlock.Light.DarkActionBar,或是你把上述主题作为父来自定义主题。
主题定义在你的整个应用程序清单中,或是每个 activity。另外,在调用 super.onCreate(Bundle) 之前,你也可以在每个 activity 代码中定义主题。这必须让每个 activity 继承 'Sherlock' activity 基类之一,并可使用操作栏。更多信息如何指定一个主题,在 Android 官方文档可以找到。
Mirrored Attributes
由于Android 主题化系统的限制,任何主题的自定义都必须以两个属性来声明,name 和 parent。正常的“android”为前缀的属性应用到原生的操作栏,没有前缀的是对自定义的。
下面是上面提到的“Styled”示例的一个完整主题:
<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/bg_striped</item>
<item name="android:background">@drawable/bg_striped</item>
<item name="backgroundSplit">@drawable/bg_striped_split</item>
<item name="android:backgroundSplit">@drawable/bg_striped_split</item>
</style>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
ActionBarSherlock 演示项目
图 4 Github actionsherlock 项目
图 5 actionbarsherlock 项目 actionbarsherlock-samples 目录
actionsherlock 源代码中包含很多示例:
- Demos
The demo sample is a showcase of the functionality of the library and its action bar. There is an example for nearly every major feature of the library and you should refer to the source code for each activity for the proper way to use each.
- Fragments
This sample is simply the 'API Demos' sample from the Android support library ported to use SherlockFragmentActivity and SherlockFragment. It should provide a good idea of how these two classes are used to replace FragmentActivity and Fragment.
- RoboGuice
A port of one of the RoboGuice sample applications which shows how you can combine two libraries which require the use of base activities.
- Styled
This sample is adapted from a blog post by Nick Butcher which demonstrates how to style various action bar components. While originally targetted at Honeycomb tablets, this sample still provides a good starter for styling.
- Known Bugs
Unlike the others, this sample application's sole purpose it to demonstrate known bugs with the library. These oftentimes will be framework-related which need fixed in Android before they can be fixed in the library.
本文 ActionBarSherlock 简单演示
环境
- Windows 7 64 位
- Eclipse ADT V22.6.2,Android 4.4.2(API 19)
- SAMSUNG GT-I9008L,Android OS 2.2.2
项目结构
图 6 项目结构
简单演示
该演示只是一个使用 ActionBarSherlock 必需设置的简单演示。如图 6 所示。
图 7 本文的简单演示
核心代码如下所示:
MainActivity.java
package com.example.mydemo;
import android.os.Bundle;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.SubMenu;
public class MainActivity extends SherlockActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu sub = menu.addSubMenu("Theme");
sub.add(0, R.style.Theme_Sherlock, 0, "Default");
sub.add(0, R.style.Theme_Sherlock_Light, 0, "Light");
sub.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0,
"Light (Dark Action Bar)");
sub.getItem().setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS
| MenuItem.SHOW_AS_ACTION_WITH_TEXT);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home || item.getItemId() == 0) {
return false;
}
Toast.makeText(this, "Theme changed to \"" + item.getTitle() + "\"",
Toast.LENGTH_SHORT).show();
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// Used for theme switching in samples
setTheme(R.style.Theme_Sherlock);
// setTheme(R.style.Theme_Sherlock_Light);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mydemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 设置 main.xml 的主题为 Theme.Sherlock -->
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Android 关于 ActionBarSherlock 的使用的更多相关文章
- android 代码混淆示例
参考其它资料为项目代码做了一下混淆 项目中使用了 slidingmenu actionbarsherlock fastjson volley httpclient 等第三方库, 并使用了 ...
- Android 2.x中使用actionbar - Actionbarsherlock (2)
先前有一个项目,是基于android4.0来开发,使用到了Fragment及ActionBar,没打算支持android2.1-android2.3系列版本 写完之后,我将此应用发布到百度应用,一天以 ...
- Android 2.x中使用actionbar - Actionbarsherlock
1. 范例说明 从Android 3.0开始,Android引入了ActoinBar,不得不说3.0之前android的标题栏确实比较丑,并且还没有任何功能. 之前很多应用的顶部栏很多都是仿苹果的,比 ...
- Android ActionBarSherlock使用教程
Android ActionBarSherlock使用教程 本文转自 http://www.chenwg.com/android/actionbarsherlock%E4%BD%BF%E7%94%A8 ...
- Android 开源框架ActionBarSherlock初探
1:我的开发环境是Ubuntu12.04下:adt-bundle-linux-x86-20130729. ActionBarSherlock下载地址:http://actionbarsherlock. ...
- Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...
- Android UI ActionBar功能-ActionBarSherlock 的使用
ActionBarSherlock实现了在ActionBar上添加一个下拉菜单的功能,也是App常用的功能之一: ActionBarSherlock是第三方提供的一个开源类库,下载地址:http:// ...
- android ActionBarSherlock使用说明
源代码地址:https://github.com/JakeWharton/ActionBarSherlock 1.添加项目依赖包 2.修改AndroidManifest.xml中的主题(或者继承该主题 ...
- android项目中导入actionbarsherlock 需要注意的地方
1,在导入actionbarsherlock 这个library时,如果一直报" Invalid Project Description" ; 解决办法: android中li ...
随机推荐
- C#访问远程主机资源的方法,多种方式
最近要实现访问远程主机的共享目录中的一个文件.遇到了权限问题.google了一下,找到了几种解决方法,记录如下: 一.调用Net use命令 // 使用方法: //if (Connect ...
- MODBUS RTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数
浮点数保存的字节格式如下: 地址 +0 +1 +2 +3内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里S 代表符号位,1是负,0是正E 偏移127的幂,二进 ...
- C++ inline内联函数
inline 函数避免函数调用的开销 // find longer of two strings const string &shorterString(const string &s ...
- Reflector_8.3.0.93_安装文件及破解工具
Reflector_8.3.0.93_安装文件及破解工具 下载地址:http://pan.baidu.com/s/1jGwsYYM 约 8.9MB
- Mysql添加和删除唯一索引、主键
1.PRIMARY KEY(主键索引) 添加 ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` );删除 ALTER TABLE `table_n ...
- 使用开源库 SVPullToRefresh 实现上拉加载下拉刷新
SVPullToRefresh开源库地址 https://github.com/samvermette/SVPullToRefresh 将整个文件夹SVPullToRefresh拖入工程中并引入头文件 ...
- 罪恶黑名单第一季/全集The Blacklist迅雷下载
罪恶黑名单 第一季 The Blacklist Season 1 (2013)本季看点:几十年来,绰号「红魔」(Red)的前军事情报官员Raymond Reddington(James Spader) ...
- spring源代码分析
预初始化beanDefaultListableBeanFactory preInstantiateSingletons
- Android之文件搜索工具类
/** * @detail 搜索sdcard文件 * @param 需要进行文件搜索的目录 * @param 过滤搜索文件类型 * */ private void search(File file, ...
- 以太坊私有链POA模式
1.创建目录 mkdir devnet cd devnet mkdir node1 node2 2.创建账户 geth --datadir node1/ account new geth --data ...