ActionBar

首先来认识ActionBar

概念:

动作栏或导航控件,Action bar就是替换3.0以前的tittle bar和menu

主要功能:

1)突出显示一些重要操作(如“注册”、“登录”、“搜索”等),将平时隐藏的选项菜单显示成活动项ActionItem;

2)在程序中保持统一的页面导航和切换方式。这种基于Tab的导航方式,可以切换多个Fragment;

3)提供基于下拉的导航菜单;

4)使用程序logo,作为返回APP的HOME主页面或向上的导航操作。

ActionBar分成四个区域:

app icon 图标区:可显示APP的icon,也可用其他图标代替。当软件不在最高级页面时,图标左侧会显示一个左箭头,用户可以通过这个箭头向上导航

View Control 视图切换:drop-down菜单或tab controls,也可以用来显示非交互的内容,例如app title或更长的品牌信息

action buttons 动作按钮:这个放最重要的软件功能,放不下的按钮就自动进入Action overflow了

action overflow 溢出动作项:不常用的操作项目自动进入Action overflow


给一些简单的代码来认识一下ActionBar


导航栏 

3.0之前叫 titleBar
3.0-5.0之间叫ActionBar
5.0之后叫toolaBar

向ActonBar上放搜索的两种方式
1.menu中 item的属性  actionViewClass = "android.widget.searchview";
在 onCreatOptionsMenu中拿到 searchView的id
 


        android:id="@+id/search_item"
        android:actionViewClass="android.widget.SearchView"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="搜索"/>
    
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);


MenuItem item = menu.findItem(R.id.search_item);
SearchView view = (SearchView) item.getActionView();
return true;
}




2.menu中的一个item一个新的布局  放时钟  属性  android:actionLayout="@layout/item_layout"


        android:id="@+id/clock_item"
        android:actionLayout="@layout/item_layout"
        android:orderInCategory="500"
        android:showAsAction="always"
        android:title="时钟"/>


ActionBar的基本用法


//1.实例化ActionBar 对象
actionBar = getActionBar();
// 设置左上角 logo 是否显示 默认是 显示(true)
actionBar.setDisplayShowHomeEnabled(false);
// 设置左上角是否有 返回键 默认是 没有(false)
actionBar.setDisplayHomeAsUpEnabled(true);
// 设置左上角的标题文本是否存在 默认显示(true)
actionBar.setDisplayShowTitleEnabled(true);
// 设置 左上角的 部分是否可以被点击
actionBar.setHomeButtonEnabled(false);


// 隐藏
// actionBar.hide();


添加与删除ActionBar

添加ActionBar:

 从Android3.0(API级别 11)开始:默认的主题是Theme.Hole,Action bar被包含在这个主题中

当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值

Android 3.0以前使用(需要引入appcompat v7 Support Library)

删除ActionBar:

把Activity的主题设置为Theme.Holo.NoActionBar就可以了

在AndroidManifest.xml清单配置文件中:
 


使用Action bar的 hide()方法:

在onCreate()方法中执行如下代码:
ActionBar actionBar = getActionBar();  
actionBar.hide();  

requestWindowFeature(Window.FEATURE_NO_TITLE);


添加ActionBar动作项

1与添加系统菜单相同,重写onCreateOptionsMenu()

2通过给元素声明android:showAsAction=”ifRoom”属性

never : 不将该MenuItem显示在ActionBar上(是默认值)

always  : 总是将该MenuItem显示在ActionBar上

ifRoom  : 当AcitonBar位置充裕时将该MenuItem显示在ActionBar上

withText  : 将该MenuItem显示在ActionBar上,并显示该菜单项的文本

collapseActionView  : 将该ActionView折叠成普通菜单项。最低API=14

3重写onOptionsItemSelected()的回调方法,处理用户选择动作项的操作


ActionBar相关类

1.ActionBar  Activity.getActionBar() 获取ActionBar对象:

hide() 隐藏

show() 显示

1.1setNavigationMode(int mode) 设置导航模式

又有:

ActionBar.NAVIGATION_MODE_LIST 下拉列表

NAVIGATION_MODE_STANDARD 默认

NAVIGATION_MODE_TABS 页卡

Tab newTab() 创建页卡

2.Menu

2.2.MenuItem findItem(int id) 查找菜单项或action item



隐藏ActionBar的三种方法

1.actionBar.hide();

2.requestWindowFeature(Window.FEATURE_NO_TITLE);

3. android:theme="@android:style/Theme.Black.NoTitleBar" 
@android:style/Theme.DeviceDefault.Light.NoActionBar
@android:style/Theme.Black.NoTitleBar.Fullscreen


向ActionBar上加自定义控件两种方式

1.android:actionViewClass="android.widget.SearchView"

2.android:actionLayout="@layout/item_layout"


添加下拉式导航

 1.  创建一个给Spinner使用的item布局文件

 2.  实现ActionBar.OnNavigationListener回调接口,处理用户选择列表项的事件

3.  调用ActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)方法启用导航模式

 4.  用setListNavigationCallbacks()方法给下拉列表设置回调方法

4.1   actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);  

4.2  这个方法需要SpinnerAdapter和ActionBar.OnNavigationListener对象



ActionView的使用

作用:可编辑的动作项,如SearchView可以直接在ActionBar上使用

1. 两种方式添加ActionView

actionLayout属性,指定一个布局文件

actionViewClass属性,指定个实现CollapsibleActionView的子类

2. 手动展开和折叠菜单栏

MenuItem.expandActionView() 展开ActionView

MenuItem.collapseActionView() 折叠ActionView

MenuItem.setOnActionExpandListener() 设置展开或折叠的监听事件 


ActionBarTab的使用

作用:通常用选项标签使Fragmengt之间相互切换

使用步骤

1.  实现ActionBar.TabListener接口

例如:

警告:针对每个回调中的Fragment事务,你都不必调用commit()方法---系统会调用这个方法,并且如果你自己调用了这个方法,有可能会抛出一个异常。你也不能把这些Fragment事务添加到回退堆栈中。


class MyTabListener implements  ActionBar.TabListener{

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
int tag = Integer.parseInt(tab.getTag().toString());
switch(tag){
case 1:
ft.replace(R.id.main, new FragmentA(),"fragmentA");
// ft.addToBackStack("fragmentA");不能加入回退栈
break;
case 2:
ft.replace(R.id.main, new FragmentB(),"fragmentB");
break;
case 3:
ft.replace(R.id.main, new FragmentC(),"fragmentC");
break;
}
// ft.commit();不用调用提交方法
}


@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub

}


@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub

}

}

2.  必须调用ActionBar.setNavigationMode(NAVIGATION_MODE_TABS)方法让选项标签可见

actionBar = getActionBar();
//设置导航模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);

//如果选项标签的标题实际指示了当前的View对象,你也可以通过调用setDisplayShowTitleEnabled(false)方法来禁用Activity的标题

3.  创建ActionBar.Tab选项标签对象并设置监听事件

对于每个要添加的选项标签,都要实例化一个ActionBar.Tab对象,并且调用setTabListener()方法设置ActionBar.Tab对象的事件监听器,还可以用setText()或setIcon()方法来设置选项标签的标题或图标。


Tab tab1 = actionBar.newTab();
tab1.setIcon(R.drawable.calendar);
tab1.setTabListener(new MyTabListener());
tab1.setTag("1");

4.  调用ActionBar.addTab(Tab)方法,将选项标签添加到动作栏中

启动程序图标导航

作用:是让APP的LOGO也变成可以点击的导航图标

1. ActionBar getActionBar() 获取当前Activity的ActionBar对象

2. ActionBar.setDisplayHomeAsUpEnabled(true);  设置是否将LOGO图标转成可点击的按钮,并在图标前添加一个向左的箭头

3. ActionBar.setDisplayShowHomeEnabled(true) 设置是否显示LOGO图标

4. ActionBar.setHomeButtonEnabled(true) 设置是否将LOGO图标转变成可点击的按钮


分隔操作栏

仅Android4.0(API 级别 14)或以上的版本

元素中添加uiOptions=”splitActionBarWhenNarrow”属性设置


ActionBar的分析讲解就到这里吧

你可能感兴趣的:(ActionBar)