转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38488849
Action Bar 初步
从今天开始,我们进入Android UI控件的学习阶段。首先我们来了解一下在Android开发中几乎每一个APP都会用到的一个非常重要的控件--Action Bar。Action Bar是在Android3.0之后新增的功能导航栏控件,它标识了用户当前操作界面的位置,并提供了额外的用户动作和界面导航功能。使用Action Bar的好处是可以为用户提供统一的导航操作栏,且将一些比较为重要的操作放在导航栏中方便用户操作,还有就是Action Bar可以自适应各种不同大小的屏幕,有良好的屏幕分辨率适配功能。下面是一张Android官网提供的一张Action Bar组成元素的的实例图片,并有相关的说明,如图下:
图标说明: 1、Action Bar图标;2、两个action 选项;3、overflow按钮。
基本了解了Action Bar的概念以及组成方式后,下面我们来深入地学习如何创建自己的Action Bar。
不同Android系统版本使用Action Bar的包引入问题
由于Action Bar是Android 3.0 (API level 11)之后才引入Android API中的,所以Android3.0之前的API是没有提供Action Bar的原生类和方法。那Android SDK为了兼容不同低版本和高版本的开发,另外提供了一个第三方的jar类库--android-support-v7-appcompat.jar。它封装了Action Bar相关的类和方法,使用Android3.0以下版本的Android SDK的同学只要引入该jar包,且子类Activity继承ActionBarActivity类便可使用Action Bar了。
为界面添加ActionBar
接下来就可以开始使用Action Bar来进行我们的开发工作了,首先要为我们的界面(Activity)引入Action Bar,第一步是在AndroidManifest.xml文件中的对应声明的Activity添加以下属性值(这里默认是基于Android4.4的API上开发的):
<!--ActionBar浅色背景 ,Android3.0版本以下使用@style/Theme.AppCompat.Light-->
android:theme="@android:style/Theme.Holo.Light"
添加完该属性后我们为对应的界面添加了一个浅色背景的Action Bar,对应显示的界面如图下:
若要将其换成稍微深一点的背景色,可以将属性值改成如下:
<!--ActionBar深色背景,Android3.0版本以下使用@style/Theme.AppCompat.Light.DarkActionBar-->
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
对应的显示的界面如图下:
如果想要对整个APP的Activity设置相同的Action Bar样式,可以在AndroidManifest.xml中的<application/>设置全局的主题,这样可以将Theme样式应用到每一个Activity上,设置方法如同上。
ActionBar图标和标题的修改及事件响应
<!--设置ActionBar图标 -->
android:logo="@drawable/sys_icon"
<!--设置ActionBar的名称 -->
android:label="@string/main_title"
代码设置的方法是首先通过调用上下文的getActionBar()方法获取ActionBar实例对象,然后再调用ActionBar对象的setIcon()和setTitle()方法分别设置ActionBar的图标和Title,具体的代码如下:
/**
* 获取ActionBar实例对象,若是Android3.0之前的版本,需
* 调用getSupportActionBar()方法获取ActionBar实例对象
*/
ActionBar mActionBar = getActionBar();
//设置ActionBar的icon
mActionBar.setIcon(R.drawable.sys_icon);
//设置ActionBar的title
mActionBar.setTitle(R.string.main_title);
设置完成后,运行程序,界面视图效果如下:
ActionBar mActionBar = getActionBar();
//是否启用ActionBar图标的导航功能
mActionBar.setDisplayHomeAsUpEnabled(true);
该方法主要作用是设置ActionBar图标是否具有导航点击事件功能,接下来重写Menu的事件响应方法onOptionsItemSelected(MenuItem item),然后执行如下操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
//ActionBar Home键ID
case android.R.id.home:
//关闭当前界面
finish();
break;
default:
break;
}
return true;
}
在模拟器上运行实例程序,操作及效果图如下: