Action Bar是app应用顶部的一个方形区域,不一定总会显示(如全屏Theme时),它属于窗口的一部分,有点类似于windows的窗口的标题栏,如下图所示:

ActionBar简要介绍:
如上图所示,标题栏一般会有三类按钮:
1、可以称为home区,这里有一个标识app的按钮,这个按钮默认不被激活,图片显示默认跟app的图标一致
2、可以称为按钮区,显示在按钮区的多个标题栏按钮
3、“更多”按钮,点击可以下拉出隐藏的标题栏按钮,俗称:overflow
需要明确的一点是:
ActionBar的API最早是在Android 3.0(API Level 11)的时候加入Android中的,但是我们也可以在Android 2.1(API Level 7)以上的版本使用它,只是需要加入支持包,也就是通常说的 v4 support library和 v7 support library
一般来说,为了兼容性考虑,在写应用的时候,都会使用兼容性包里的ActionBar相关API,而不会去使用系统自带的,所以后面的部分默认都是基于V4和V7包中的内容来介绍。
在导入要使用兼容性包中的ActionBar,我们的MainActivity或者其他XxxActivity就不能在继承自Activity了,需要换成:ActionBarActivity,然后还需要在清单文件中,换成AppCompat主题或者其子主题,关于主题可以看这一篇ActionBar主题颜色
拿到ActionBar对象:
public class MainActivity extends ActionBarActivity
</activity>
然后,可以通过下面一句代码,拿到ActionBar的对象:
ActionBar mActionBar = getSupportActionBar();
然后可以调用下面两句,让整个actionBar显示或者隐藏:
mActionBar.hide();
mActionBar.show();
激活home区按钮:
但是单单是拿到这个对象,并没什么用,还是不能点击,需要做进一步处理,这里类似于Button的使能设置,setEnable:
mActionBar.setHomeButtonEnabled(true);
mActionBar.setDisplayShowHomeEnabled(true);//这两句就可以让actionBar的图标可以响应点击事件
mActionBar.setDisplayHomeAsUpEnabled(true);//这一句主要用于后面返回效果,后面会讲
设置按钮区:
上面的按钮区,则需要使用一个表示menu的xml文件,一般存放在res/menu/下,然后重写onCreateOptionsMenu()方法来设置,res/menu/main_activity_actions.xml文件如下:
<!--?xml version=1.0 encoding=utf-8?-->
看到上面使用了一个自定义属性:showAsAction,这个属性用于表示按钮的显示方式一般常用的有:ifRoom(表示有空间就会显示出来),withText(表示带名字,但不一定会显示,一般会文字会显示在”更多“按钮下),never(从不直接显示在ActionBar上,意味着这个按钮一直会显示在”更多“按钮的下拉菜单上),要注意的是,”更多“按钮不一定会显示,如果没有足够的空间或者有never属性的按钮,则会显示,否则不会显示。stackoverflow上有研究过怎么让更多一直显示,感兴趣可以看看:https://stackoverflow.com/questions/20444596/how-to-force-action-bar-overflow-icon-to-show
除此之外,上面的xml中还制定了按钮的id和图片和title属性。
然后,可以通过重写 onCreateOptionsMenu()方法来让这些图标都显示出来:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
处理点击事件:
通过重写onOptionsItemSelected()方法可以达到目的,但是需要注意的一点是,对于ActionBar图标,也就是那个app的图标,它的id是:android.R.id.home。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case android.R.id.home:
Toast.makeText(this, home, 0).show();
break;
case R.id.action_search:
Toast.makeText(this, search, 0).show();
break;
default:
Toast.makeText(this, itemId= + itemId, 1).show();
break;
}
return super.onOptionsItemSelected(item);
}
完成上面的部分,就可以得到一个类似于下面的界面了

要实现从应用层截系统屏幕的功能 , 首先你的应用需要有读取系统文件的权限 ,如何通过process = Runtime.getRuntime().exec(su); 的方式得到权限有在“Android底层事件注入,控制系统的触摸、点击、各个按钮触发”博客中提到
https://blog.csdn.net/fanjunjian1991/article/details/44648287 ,各位看官可前去瞧瞧。