Adnroid 3.0之后已经默认开启了ActionBar功能,ActionBar位于传统标题栏的位置。
ActionBar提供如下功能:1,显示选项菜单的菜单项(将菜单项显示成Action Item)2,使用程序图标作为返回Home主屏或向上的导航操作3,提供交互式View作为Action View。4,提供基于Tab的导航方式,可用于切换多个Fragment5,提供基于下拉的导航方式下面是使用ActionBar显示选项菜单。显示选项菜单的菜单项
res/meun/menu.xml
1
showAsAction设置成always的效果
showAsAction设置成never的效果
提供交互式View作为Action View
在ActionBar上添加Action View,
定义Item时使用 android:actionLayout="";属性,指定Action View对应的视图资源。
使用程序图标作为返回Home主屏或向上的导航操作
实现非常容易只需设置
actionBar.setDisplayHomeAsUpEnabled(true);
并且重写onOptionsItemSelected()方法
@Override public boolean onOptionsItemSelected(MenuItem item) { //android.R.id.home是系统的Home主屏id if (item.getItemId()==android.R.id.home) { this.finish(); } return super.onOptionsItemSelected(item); }
提供基于Tab的导航方式,可用于切换多个Fragment
下面是实现方法:
MainActivity
1 package com.dj.actionbartab; 2 3 import android.app.ActionBar; 4 import android.app.ActionBar.Tab; 5 import android.app.ActionBar.TabListener; 6 import android.app.Activity; 7 import android.app.Fragment; 8 import android.app.FragmentTransaction; 9 import android.os.Bundle;10 import android.view.MenuItem;11 /**12 * ActionBar结合Fragment实现Tab导航功能13 */14 public class MainActivity extends Activity {15 private ActionBar actionBar;16 @Override17 protected void onCreate(Bundle savedInstanceState) {18 super.onCreate(savedInstanceState);19 setContentView(R.layout.container);20 actionBar = getActionBar();21 // 设置ActionBar的导航方式为Tab22 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);23 // 为ActionBar添加两个Tab页,并设置监听(传入一个fragment)。24 Tab tab = actionBar.newTab();25 tab.setText("第一项");26 tab.setTabListener(new MyTabListener(new MyFragment1()) );27 actionBar.addTab(tab);28 actionBar.addTab(actionBar.newTab().setText("第二项").setTabListener(new MyTabListener(new MyFragment2())));29 //使用程序图标作为返回Home主屏,可以点击,并且有向左的图标30 actionBar.setDisplayHomeAsUpEnabled(true);31 }32 33 /**34 * 实现ActionBar.TabListener接口,构造函数中把fragment传进来,为了更好控制fragment。35 *36 */37 class MyTabListener implements TabListener{38 private Fragment fragment;39 public MyTabListener(Fragment fragment) {40 this.fragment=fragment;41 }42 @Override43 public void onTabSelected(Tab tab, FragmentTransaction ft) {44 /**获得Fragment管理,开启实务,将view替换成fragment,提交事务*/45 ft=getFragmentManager().beginTransaction();46 ft.replace(R.id.container, fragment); 47 ft.commit();48 }49 @Override50 public void onTabUnselected(Tab tab, FragmentTransaction ft) {51 //tab没有被选择的时候调用,移除当前的fragment让下个Tab所对应的fragment进来。52 ft.remove(fragment);53 }54 @Override55 public void onTabReselected(Tab tab, FragmentTransaction ft) {56 }57 }58 @Override59 public boolean onOptionsItemSelected(MenuItem item) {60 //android.R.id.home是系统的Home主屏id61 if (item.getItemId()==android.R.id.home) {62 this.finish();63 }64 return super.onOptionsItemSelected(item);65 }66 67 68 }
两个Fragment
package com.dj.actionbartab;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MyFragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_tab1, null); }}
package com.dj.actionbartab;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MyFragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_tab2, null); }}
下面是xml文件:
activity_tab1.xml
activity_tab2.xml
container.xml