介绍:
Action Bar是一种新増的导航栏功能,在Android3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等功能。使用ActionBar的好处是,它可以给提供一种全局统一的UI界面,使得用户在使用任何一款软件时都懂得该如何操作,并且ActionBar还可以自动适应各种不同大小的屏幕.
用处及目的:
1. 提供一个用于识别应用程序的标示和用户的位置的专用空间。
这个空间的左边是应用的图标或logo,以及Activity的标题。但是,如果是像当前选择的标签这样的标识当前View对象的导航标签,你可以选择删除Activity的标题。
2. 在不同的应用程序之间提供一致的导航和视觉体验。
Action bar提供了用于fragment间切换的内置导航标签。它还提供了一个用于替换导航模式或优化当前视觉效果(如按照不同条件排序的列表)的下拉列表。
3. 突出Activity的关键操作(如“搜索”、“创建”、“共享”等),并且在可预见的方法内给用户提供快捷的访问。
对于关键的用户操作,你能够通过把选项菜单项作为操作项直接放到操作栏中,从而提供快捷的访问。操作项目还能提供一个操作窗口,这个窗口给更直接的操作行为提供一个嵌入的窗口部件。没有改进成操作项的菜单项在溢出菜单中还是有效的,用户既可以使用设备上的菜单按钮(设备上有按钮的时候),也可以使用操作栏中的溢出菜单按钮(当设备上不包含菜单按钮时)来显示这些操作项目。
上面的总结一下:Action bar就是替换3.0以前的tittle bar和menu。
接下来一起来学习下这个控件吧。
一:修改Action Bar标题
最简单的一种方式,在清单文件中,看代码
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" //更改项目图标
android:label="@string/app_name" //更改名称
android:supportsRtl="true"
android:theme="@style/AppTheme" >
二 :删除Action bar
第一种方法 : <activity android:theme="@android:style/Theme.Holo.NoActionBar">
第二种方法:使用Action bar的 hide()方法,如下:- ActionBar actionBar = getActionBar();
- actionBar.hide();
三 :添加按钮
ActionBar可以根据需要添加文字或者是图标,过多的话会隐藏在overflow按钮里面(右面的三点)
当Activity启动时,调用onCreateOptionsMenu来取出所有按钮,加载menu资源,res-menu
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_1" android:icon="@mipmap/ic_launcher" app:showAsAction="ifRoom" android:title="item1"/> <item android:id="@+id/action_2" android:icon="@mipmap/ic_launcher" app:showAsAction="ifRoom" android:title="item2"/> <item android:id="@+id/action_settings" android:icon="@mipmap/ic_launcher" app:showAsAction="never" android:title="setting"/> </menu>
效果图
这里用了三个item实现了三个Action按钮
属性 id:每一个按钮的标识 icon : 定义的图标 title :要显示的文字(图标正常,通常不显示文字)
showAsAction :指定按钮显示位置 always表示永远显示在actionbar上,屏幕空间不足,不显示
ifRoom表示屏幕空间够显示在ActionBar中,不够就显示在overflow中
never则永远显示在overflow中
如果继承自AppCompatActivity 需要使用app:showAsAction,
继承自Activity 需要使用android:showAsAction
MainActivity中添加方法显示ActionBar
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); }
注意:定义的文字默认不显示,但是要有,如果定义的图标在ActionBar上显示,可长按看到title定义的内容
四: 监听事件
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_1: //添加处理代码 Toast.makeText(this,"1",Toast.LENGTH_LONG).show(); return true; case R.id.action_2: //添加处理代码 Toast.makeText(this,"1",Toast.LENGTH_LONG).show(); return true; case R.id.action_settings: //添加处理代码 Toast.makeText(this,"1",Toast.LENGTH_LONG).show(); return true; } return true; }
五 :使三个小点里的图标和title一起显示出来
//设置menu显示icon @Override protected boolean onPrepareOptionsPanel(View view, Menu menu) { if (menu != null) { if (menu.getClass() == MenuBuilder.class) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { } } } return super.onPrepareOptionsPanel(view, menu); }
效果图:
就介绍这么多,感兴趣的可以往深处学学。