ActionBar(活动栏)替代了显示在屏幕顶端的标题栏。主要负责显示菜单,widget,导航等功能,主要包括:

  • 显示选项菜单中的菜单项到活动栏;
  • 添加可交互的视图到活动栏作为活动视图;
  • 使用应用的图标作为活动项,代表返回home或者向上等重要操作;
  • 提供标签导航,方便不同的Fragment之间切换;
  • 提供下拉导航功能。

一、添加Option Menu到活动栏
1、利用menu目录下的xml布局文件 1.1、xml布局文件:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/action_search"        android:actionViewClass="android.widget.SearchView"        android:icon="@android:drawable/ic_menu_search"        android:showAsAction="ifRoom"        android:title="@string/menu_search"/>    <item        android:id="@+id/menu_edit"        android:icon="@android:drawable/ic_menu_edit"        android:showAsAction="ifRoom"        android:title="@string/menu_edit"/>    <item        android:id="@+id/menu_save"        android:icon="@android:drawable/ic_menu_save"        android:showAsAction="ifRoom"        android:title="@string/menu_save"/>    <item        android:id="@+id/menu_delete"        android:icon="@android:drawable/ic_menu_delete"        android:showAsAction="ifRoom"        android:title="@string/menu_delete"/>    <item        android:id="@+id/action_share"        android:icon="@android:drawable/ic_menu_share"        android:showAsAction="ifRoom"        android:title="@string/menu_share"/></menu>

1.2、在Activity或Fragment的onCreateOptionsMenu里进行填充
public class MenuNavActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.menu_layout);ActionBar mActionBar = getActionBar();// 将 Home 按钮显示为向上, 提示用户点击这个按钮可以返回应用程序的上一级。mActionBar.setDisplayHomeAsUpEnabled(true);}/** * 利用xml布局文件 */@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.opt_menu, menu);    return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case android.R.id.home:            // app icon in action bar clicked; go home            Intent intent = new Intent(this, MainActivity.class);            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);            startActivity(intent);            return true;        default:            return super.onOptionsItemSelected(item);    }}}


2、直接在Activity或Fragment的onCreateOptionsMenu里实现
public class MenuNavActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.menu_layout);ActionBar mActionBar = getActionBar();// 将 Home 按钮显示为向上, 提示用户点击这个按钮可以返回应用程序的上一级。mActionBar.setDisplayHomeAsUpEnabled(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuItem actionItem = menu.add("Edit");actionItem.setIcon(android.R.drawable.ic_menu_edit);actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);  MenuItem actionItem2 = menu.add("Delete");actionItem2.setIcon(android.R.drawable.ic_menu_delete);actionItem2.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);  return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case android.R.id.home:            // app icon in action bar clicked; go home            Intent intent = new Intent(this, MainActivity.class);            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);            startActivity(intent);            return true;        default:            return super.onOptionsItemSelected(item);    }}}

运行效果图 Android ActionBar详解_第1张图片


二、提供导航标签
TabNavActivity.java
public class TabNavActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.tab_layout);// 设置 ActionBarActionBar mActionBar = getActionBar();// 将 Home 设置为向上mActionBar.setDisplayHomeAsUpEnabled(true);// 设置 ActionBar 的导航模式为TABmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);mActionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_TITLE);Tab t1 = mActionBar.newTab();t1.setText("首页ABC");t1.setTabListener(new MyTabListener<HomeFragment>(this, "home", HomeFragment.class));mActionBar.addTab(t1);Tab t2 = mActionBar.newTab();t2.setText("好友ABC");t2.setTabListener(new MyTabListener<FriendFragment>(this, "friend", FriendFragment.class));mActionBar.addTab(t2);Tab t3 = mActionBar.newTab();t3.setText("消息ABC");t3.setTabListener(new MyTabListener<MessageFragment>(this, "message", MessageFragment.class));mActionBar.addTab(t3);Tab t4 = mActionBar.newTab();t4.setText("设置ABC");t4.setTabListener(new MyTabListener<SettingFragment>(this, "setting", SettingFragment.class));mActionBar.addTab(t4);if (savedInstanceState != null) {//默认打开上次推出时候的Fragment            mActionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));        }}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("tab", getActionBar().getSelectedNavigationIndex());}public static class MyTabListener<T extends Fragment> implements ActionBar.TabListener {        private final Activity mActivity;        private final String mTag;        private final Class<T> mClass;        private final Bundle mArgs;        private Fragment mFragment;        public MyTabListener(Activity activity, String tag, Class<T> clz) {            this(activity, tag, clz, null);        }        public MyTabListener(Activity activity, String tag, Class<T> clz, Bundle args) {            mActivity = activity;            mTag = tag;            mClass = clz;            mArgs = args;            // Check to see if we already have a fragment for this tab, probably            // from a previously saved state.  If so, deactivate it, because our            // initial state is that a tab isn't shown.            mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);            if (mFragment != null && !mFragment.isDetached()) {                FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();                ft.detach(mFragment);                ft.commit();            }        }        public void onTabSelected(Tab tab, FragmentTransaction ft) {            if (mFragment == null) {                mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);                ft.add(R.id.ll_content, mFragment, mTag);            } else {                ft.attach(mFragment);            }        }        public void onTabUnselected(Tab tab, FragmentTransaction ft) {            if (mFragment != null) {                ft.detach(mFragment);            }        }        public void onTabReselected(Tab tab, FragmentTransaction ft) {            Toast.makeText(mActivity, "onTabReselected", 0).show();        }    }@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case android.R.id.home:            // app icon in action bar clicked; go home            Intent intent = new Intent(this, MainActivity.class);            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);            startActivity(intent);            return true;        default:            return super.onOptionsItemSelected(item);    }}}


HomeFragment.java
public class HomeFragment extends Fragment implements OnQueryTextListener {private static final String TAG = null;@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.home, null);return view;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {// We have a menu item to show in action bar.        setHasOptionsMenu(true);        super.onActivityCreated(savedInstanceState);}@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {        // Place an action bar item for searching.        MenuItem item = menu.add("Search");        item.setIcon(android.R.drawable.ic_menu_search);        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);        SearchView sv = new SearchView(getActivity());        sv.setOnQueryTextListener(this);        item.setActionView(sv);    }@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();}@Overridepublic boolean onQueryTextChange(String newText) {Log.e(TAG, "newText="+newText);return true;}@Overridepublic boolean onQueryTextSubmit(String query) {Log.e(TAG, "newText="+query);return true;}}

余下Fragment类似
运行效果图 Android ActionBar详解_第2张图片


三、提供向上导航
使用应用的图标作为活动项,代表返回home或者向上等重要操作。

package com.yulore.nav;import android.app.ActionBar;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.MenuItem;public class NavUpActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.nav_up_layout);ActionBar mActionBar = getActionBar();// 将 Home 按钮显示为向上, 提示用户点击这个按钮可以返回应用程序的上一级。mActionBar.setDisplayHomeAsUpEnabled(true);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case android.R.id.home:            // app icon in action bar clicked; go home            Intent intent = new Intent(this, MainActivity.class);            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);            startActivity(intent);            return true;        default:            return super.onOptionsItemSelected(item);    }}}

运行效果图 Android ActionBar详解_第3张图片

四、提供下拉导航功能
package com.yulore.nav;import android.app.ActionBar;import android.app.ActionBar.OnNavigationListener;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.MenuItem;import android.widget.ArrayAdapter;import android.widget.Toast;/** * 下拉列表导航 * @author feng bingbing * */public class SpinnerNavActivity extends Activity {private String[] titles = { "首页", "好友", "消息", "广场", "设置" };private ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.spin_layout);// 设置 ActionBarActionBar mActionBar = getActionBar();// 将 Home 设置为向上mActionBar.setDisplayHomeAsUpEnabled(true);// 设置 ActionBar 的导航模式为下拉列表mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);// 第二步:为下拉列表定义一个适配器adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, titles);// 第三步:为适配器设置下拉列表下拉时的菜单样式。adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// 选中的事件监听OnNavigationListener callback = new MyOnNavigationListener();// 设置列表导航的回调参数mActionBar.setListNavigationCallbacks(adapter, callback);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:// app icon in action bar clicked; go homeIntent intent = new Intent(this, MainActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);return true;default:return super.onOptionsItemSelected(item);}}private class MyOnNavigationListener implements OnNavigationListener {@Overridepublic boolean onNavigationItemSelected(int itemPosition, long itemId) {Toast.makeText(getApplicationContext(),"当前选择了:" + titles[itemPosition], 0).show();return false;}}}


运行效果图 Android ActionBar详解_第4张图片





更多相关文章

  1. WebView详解与简单实现Android与H5互调
  2. android三级缓存详解
  3. Android Studio中Module的build.gradle详解
  4. android图形系统详解五:Android绘制模式
  5. Android task和back stack详解四:intent中定义启动模式
  6. [Android基础系列]轻松实现按钮的鼠标悬停背景切换
  7. 详解Android首选项框架的使用

随机推荐

  1. 关于android百度地图离线地图的使用
  2. android中actionBar中字体颜色设置
  3. AndroidStudio使用GreenDao实战
  4. Android(安卓)原生控件ViewFlipper实现淘
  5. Android(安卓)Glide加载图片圆角效果与Im
  6. [转]Android优势与劣势
  7. 内核直接NFS挂载Android文件系统启动
  8. Android去掉SrollView、GrdiView、Recycl
  9. Android(安卓)拍照并对照片进行裁剪和压
  10. Android集成支付宝移动支付功能