首页 > 代码库 > Android--ActionBar的基本用法

Android--ActionBar的基本用法

 一  说明
android 3.0后出现, 在3.0之前称为Title Bar  显示位置在标题栏上
可以显示应用程序的图标和activity的标题
创建方式的和系统菜单相似, 区别在于: android:showAsAction=""
ifRoom  当ActionBar中有空间 则显示
always  一直显示在ActionBar中
never 永远都不显示在ActionBar中
withText  显示文字
collapseActionView   可以折叠

  二,  ActionBar中提供的功能
1, 显示选项菜单的菜单项
2, 可以使应用程序的图标作为返回上一级界面的功能
3, 提供了交互式View 和 action View
4, 可以实现基于Tab的导航方式, 可以切换Fragment
5, 下拉导航
6, ActionProvider的使用
三, 创建方式
1, 在res/menu 文件中创建每一个菜单项  声明<item/>
显示方式:  showAsAction 
图标:       icon
2, 在Activity中, 重写父类的 onCreateOptionsMenu(Menu menu) ,加载菜单资源
3, 在Activity中, 重写父类的 onOptionsItemSelected(MenuItem item) 处理每个Item的点击事件

四,分割 操作栏   API 14以上  
在清单文件中<application/> 或者<activity/> 中添加属性:android:uiOptions="splitActionBarWhenNarrow"
五, 启动导航图标
作用:  可以让当前App的图标作为可以点击的图标
获取ActionBar的对象:  getActionBar()
setDisplayShowHomeEnabled   设置是否显示应用程序的图标
setDisplayHomeAsUpEnabled    设置应用程序的图标可以被点击, 并且在图标的左侧出现一个向左的箭头
setHomeButtonEnabled 设置应用程序的图标可以被点击,但是没有箭头
        得到应用程序导航图标的ID:   android.R.id.home

六, ActionBar中的常用方法
actionBar.isShowing()  判断当前的ActionBar是否正在显示
actionBar.show()       显示ActionBar
actionBar.hide()       隐藏ActionBar
七, Action View  的使用
可以编辑动作项, 如searchView控件可以直接显示在ActionBar
实现方式有两种:
1, actionViewClass 属性  实现了CollapsibleActionView类
2, actionLayout属性   把普通的布局页面显示
八, ActionBar Tab 导航的功能   通过选项标签来切换Fragment
ActionBar + Fragment
1, 获取ActionBar的对象, 并且设置导航的模式为TABS
     setNavigationMode (int mode) 设置导航模式
    NAVIGATION_MODE_STANDARD   默认方式
    NAVIGATION_MODE_LIST 列表方式
    NAVIGATION_MODE_TABS tab标签模式
2, 让当前类实现接口 TabListener , 重写3个方法
3, 创建 每个Tab项 并且把它增加到ActionBar中
ActionBar.Tab tab = ActionBar.newTab();
tab.setIcon();//设置图标
tab.stText();//设置要显示的文字
tab.setTabListener();//设置监听

actionBar.add(tab);//把Tab增加到ActionBar中

九:去除ActionbBar 

          在setContentView之前 requestWindowFeature(Window.FEATURE_NO_TITLE);
           或者:Android:theme="@android:style/Theme.Black.NoTitleBar"

实现Fragment切换实例:

 

[java] view plain copy
 
 print?
  1. protected void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3.         setContentView(R.layout.activity_main);  
  4.   
  5.         actionBar = getActionBar();  
  6.         // 获得导航模式  
  7.         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  8.         // 创建ActionBar.Tab 项, 并且把它增加到ActionBar中  
  9.         ActionBar.Tab tab = actionBar.newTab();  
  10.   
  11.         tab.setText("头条");  
  12.         tab.setIcon(R.drawable.ic_launcher);  
  13.         tab.setTabListener(this);  
  14.         actionBar.addTab(tab);  
  15.   
  16.         tab = actionBar.newTab();  
  17.         tab.setText("体育");  
  18.         tab.setIcon(R.drawable.ic_launcher);  
  19.         tab.setTabListener(this);  
  20.         actionBar.addTab(tab);  
  21.   
  22.         actionBar.addTab(actionBar.newTab().setText("财经")  
  23.                 .setIcon(R.drawable.ic_launcher).setTabListener(this));  
  24.   
  25.         actionBar.addTab(actionBar.newTab().setText("汽车")  
  26.                 .setIcon(R.drawable.ic_launcher).setTabListener(this));  
  27.     }  
  28.   
  29.     @Override  
  30.     public void onTabSelected(Tab tab, FragmentTransaction ft) {  
  31.         // TODO Auto-generated method stub  
  32.         FragmentNew f = new FragmentNew();  
  33.         Bundle b = new Bundle();  
  34.         int position = tab.getPosition();  
  35.         b.putInt("position", position);  
  36.         f.setArguments(b);  
  37.         ft.replace(R.id.f, f);  
  38.   
  39.     }  
  40.   
  41.     @Override  
  42.     public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
  43.         // TODO Auto-generated method stub  
  44.   
  45.     }  
  46.   
  47.     @Override  
  48.     public void onTabReselected(Tab tab, FragmentTransaction ft) {  
  49.         // TODO Auto-generated method stub  
  50.   
  51.     }  
  52. }  
[java] view plain copy
 
 print?
  1. public class FragmentNew extends Fragment {  
  2.     @Override  
  3.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  4.             Bundle savedInstanceState) {  
  5.         // TODO Auto-generated method stub  
  6.         TextView t = new TextView(getActivity());  
  7.         int position = getArguments().getInt("position");  
  8.   
  9.         switch (position) {  
  10.         case 0:  
  11.             t.setText("头条");  
  12.             break;  
  13.         case 1:  
  14.             t.setText("体育");  
  15.             break;  
  16.         case 2:  
  17.             t.setText("财经");  
  18.             break;  
  19.         case 3:  
  20.             t.setText("汽车");  
  21.             break;  
  22.   
  23.         }  
  24.   
  25.         return t;  
  26.     }  
  27. }  

 

[html] view plain copy
 
 print?
    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:paddingBottom="@dimen/activity_vertical_margin"  
    6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
    7.     android:paddingRight="@dimen/activity_horizontal_margin"  
    8.     android:paddingTop="@dimen/activity_vertical_margin"  
    9.     tools:context=".MainActivity" >  
    10.   
    11.     <FrameLayout  
    12.         android:id="@+id/f"  
    13.         android:layout_width="match_parent"  
    14.         android:layout_height="match_parent" />  
    15.   
    16. </RelativeLayout>  

Android--ActionBar的基本用法