ActionBarSherlock
来源:互联网 发布:泡泡堂单机版mac 编辑:程序博客网 时间:2024/06/11 10:15
Android3.0开始就提供了ActionBar,这让Android的用户体验强了好多,但是这个ActionBar在Android3.0以下是不支持的,谷歌也没推出什么解决方案,不过呢,没有什么是实现不了的,有github上有牛人放出了开源的ActionBarSherlock,可以在Android2.x上实现ActionBar,如果你在Android3.0的手机上使用,它会调用原生的ActionBar。
ActionBarSherlock在github上的地址是:https://github.com/JakeWharton/ActionBarSherlock,它的官网是:http://actionbarsherlock.com/,下载即可,现在最新版本是4.2.0.
下载好,就解压出来,有三个文件夹,其实library就是Android公共库的使用,也就是将一些共同的东西抽取出来,包括java文件,资源文件等。
我的开发工具是eclipse,并安装了Android-maven,然后将这个library项目以maven项目导入即可。
接着新建一个Android工程,然后右键选择properties,再选择Android,接着添加library进来,如下:
1.修改项目的AndroidManifest.xml文件,将Android的Theme,也就主题改为如下:
android:theme=”@style/Theme.Sherlock.Light” ,也就是使用ActionBarSherlock里的主题;
2.修改MainActivity.java文件,默认生成的MainActivity类是继承Activity的,现在将Activity修改成SherlockActivity;
3.修改menu文件夹下的main.xml文件如下:
<
menu
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
<
item
android:id
=
"@+id/add"
android:icon
=
"@android:drawable/ic_menu_add"
android:showAsAction
=
"ifRoom"
android:title
=
"@string/add"
android:titleCondensed
=
"@string/add"
>
</
item
>
<
item
android:id
=
"@+id/delete"
android:icon
=
"@android:drawable/ic_menu_delete"
android:showAsAction
=
"ifRoom"
android:title
=
"@string/delete"
android:titleCondensed
=
"@string/delete"
>
</
item
>
</
menu
>
4.要使ActionBar显示menu按钮,得重写MainActivity中的onCreateOptionsMenu方法,还要导入ActionBarSherlock中的Menu、MenuItem包,如下:
import
com.actionbarsherlock.view.Menu;
import
com.actionbarsherlock.view.MenuItem;
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
return
true
;
}
Action Bar API
为了创建一个适用于多版本的action bar,要声明activity继承于‘Sjerlock’(eg, SherlockActivity, SherlockFragmentActivity)。获取action bar的方法是getSupportActionBar()而不来替换getActionbar()。
注意:当用到SherlockfragmentActivity时,‘Sherlock’为前缀的fragment类(eg,SherlockFragment,SherlockListFragment)应该被推荐使用。当然如果不涉及到menu相关的方法,普通的fragment类也是可以的。
在3.0以前的系统上使用ActionBar需要导入下面的类:
com.actionbarsherlock.app.ActionBar
com.actionbarsherlock.view.Menu
com.actionbarsherlock.view.MenuItem
com.actionbarsherlock.view.MenuInflater
多数的错误是因为import出错,以为com.actionbarsherlock.app.*包中的类名和原始SDK中的是一致的。
至于Themes,是可以通过values,values-v11,values-v14等来分版本对待。
下面是个简单的代码片段:
- @Override
- public void onCreate(Bundle savedInstanceState) {
- setTheme(SampleList.THEME); //Used for theme switching in samples
- super.onCreate(savedInstanceState);
- setContentView(R.layout.text);
- ((TextView)findViewById(R.id.text)).setText(R.string.action_providers_content);
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- getSupportMenuInflater().inflate(R.menu.settings_action_provider, menu);
- return true;
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // If this callback does not handle the item click, onPerformDefaultAction
- // of the ActionProvider is invoked. Hence, the provider encapsulates the
- // complete functionality of the menu item.
- Toast.makeText(this, "Handling in onOptionsItemSelected avoided",
- Toast.LENGTH_SHORT).show();
- return false;
- }
注意事项:
1.自己的项目Buildtarget也要在4.0+,api 14+。不然有关Theme.Holo xml文件读取不到资源,会导致R文件不能生成。
2.由于actionbarsherlock中自带了android_support_v4的包,所以你不用再导入一个了,以前导入过了也要删除,不然会产生冲突。
3.有时候会提示你的程序不是一个库的错误,只要在ActionbarSherlock中 properties-> android 中,将islibrary勾上就行了。
4.要使用Actionbar要继承sherlockactivity,在配置文件中声明activity时,要添加Theme设置才行,而且只能是三种或parent是这三种。
1、SlidingMenu 的demo工程引用了ActionBarSherlock 里的Threme和style,所以要把后者的libary添加到前者的工程中;否则前者的style.xml文件和AndroidManifest.xml都会报错,大致如下:
Theme.Sherlock.Light.DarkActionBar无法找到
No resource found that matches the given name: attr 'homeAsUpIndicator'.
No resource found that matches the given name 'Theme.Sherlock.Light.DarkActionBar'.
原因是它本身又引用了另外一个开源库 ActionBarSherlock ,所以首先要做的就是去下载 ActionBarSherlock,引用其中的library。
2、 这样,SlidingMenu 的示例代码就引用了两个library,这时候还不能用,项目报错:
Jar mismatch! Fix your dependencies
解决此问题的方法,其实就是需要两个library使用的support包是一样的。
3、 解决了上面的问题之后,还会出现下面的问题:
可能报找不到getSupportActionBar等ActionBarSherLock的方法。原因是使用ActionBarSherLock的Activity需继承于SherlockActivity,修改SlidingMenu library中的SlidingFragmentActivity,让它继承于SherlockFragmentActivity,重新编译library导入。
剩下的工作,就是你自己好好参考实例和文档,研究如何使用了。
导入库后
需要在styles.xml更改主题为(一定要记得改 否则启动时会FC)
[html]
<!-- 这个是黑色主题 -->
<style name=
"AppBaseTheme"
parent=
"Theme.AppCompat"
>
[html]
<!-- 这个是白色主题 -->
<style name=
"AppBaseTheme"
parent=
"Theme.AppCompat.Light"
>
[html]
<!-- 这个是白色主题带黑色ActionBar -->
<style name=
"AppBaseTheme"
parent=
"Theme.AppCompat.Light.DarkActionBar"
>
下面是代码示例(注意是public class XXXActivity extends ActionBarActivity,而不是extends Activity):
- ActionBarSherlock
- ActionBarSherlock
- ActionBarSherlock
- ActionBarSherlock
- ActionBarSherlock
- ActionBarSherlock自定义
- ActionBarSherlock组件。
- ActionBarSherlock注意事项
- ABS(actionbarsherlock)
- Eclipse中引入ActionBarSherlock和ActionBarSherlock 介绍
- ActionBarSherlock混淆问题
- ActionbarSherlock的Style讲解
- ActionBarSherlock使用教程
- SlidingMenu、ActionBarSherLock 使用指南
- actionbarsherlock学习(2)
- actionbarsherlock学习(3)
- actionbarSherlock使用总结
- ActionBarSherlock 应用教程一
- 复盘:红米成功背后,雷军的五个艰难决定
- MMA7260三轴加速度计
- 获取iPhone设备的IP的地址
- C语言有符号整数隐式转换无符号整数出现的陷阱
- 脆弱的生命亮红灯
- ActionBarSherlock
- spring学习笔记(7)--lifeCyle
- 爱耳日
- eclipse验证jquery.xxx.js报错
- A Simple Socket Application
- 屏幕分辩率与FrameSize、WinSize、VisibleSize、VisibleOrigin概念理解
- windows进程间通信
- 游戏后台的快速开发
- jquery插件——仿新浪微博限制输入字数的textarea