ActionBar取代了以前的TitleBar,是一种更加灵活的人机交互方式;
ActionBar并不是完全自立门户的一个新兴的东西,而是和3.0以下版本的menu进行了合并整合;
so,添加actionbar的方式肯定和添加menu方式类似;

1.常见普通ActionBar
先来看一个menu的xml配置

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/action_settings"        android:showAsAction="always|collapseActionView"        android:title="settings"/></menu>

其中,showAsAction是一个枚举类型的值,有5个取值;

  • never:不显示在actionBar上,只有通过menu菜单才能呼出此菜单项;
  • ifroom:如果actionBar上有足够的空间则显示;
  • always:总是显示;
  • collapseActionView:为了解决空间的问题,收缩ActionView;
  • withText:显示文字;

注:它们之间可以配合使用;

2.上下分开的独立的ActionBar
实现这样的功能其实只需要一句代码:

android:uiOptions="splitActionBarWhenNarrow"

将这段代码放置到清单配置文件的对应的activity里面即可

3.可扩展的ActionBar(搜索框)

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/action_query"        android:actionLayout="@layout/al"        android:showAsAction="always|collapseActionView"        android:title="query"/></menu>

al.xml

<?xml version="1.0" encoding="utf-8"?><EditText xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content" ></EditText>

注意在menuitem里面配置的android:actionLayout属性,他代表当点击item的时候需要显示的view;也可通过android:actionViewClass属性指定;
这里再介绍几个相关的方法
》》监听actionView的展开与关闭事件

    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        for (int i = 0; i < menu.size(); i++) {            menu.getItem(i).setOnActionExpandListener(                    new OnActionExpandListener() {                        @Override                        public boolean onMenuItemActionExpand(MenuItem arg0) {                            Log.e("tag", "onMenuItemActionExpand");                            return true;                        }                        @Override                        public boolean onMenuItemActionCollapse(MenuItem arg0) {                            Log.e("tag", "onMenuItemActionCollapse");                            return true;                        }                    });        }        return super.onCreateOptionsMenu(menu);    }

4.Tab样式ActionBar

添加实现代码

    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tab);        mActionBar = getActionBar();        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        mActionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME);        ActionBar.Tab tabA = mActionBar.newTab().setText("ATab");        ActionBar.Tab tabB = mActionBar.newTab().setText("BTab");        tabA.setTabListener(new MyTabsListener(new AFragment()));        tabB.setTabListener(new MyTabsListener(new BFragment()));        mActionBar.addTab(tabA, 0);        mActionBar.addTab(tabB, 1);        mActionBar.setSelectedNavigationItem(1);    }

MyTabsListener.java(监听tab)改变事件

    protected class MyTabsListener implements ActionBar.TabListener {        private Fragment frag;        public MyTabsListener(Fragment frag) {            super();            this.frag = frag;        }        @Override        public void onTabSelected(Tab tab, FragmentTransaction ft) {            ft.replace(R.id.framel, frag);        }        @Override        public void onTabUnselected(Tab tab, FragmentTransaction ft) {        }        @Override        public void onTabReselected(Tab tab, FragmentTransaction ft) {        }    }

5.ActionMode
还有一种很常见的ActionBar,就是选择了一些数据之后(如一下列表中的某些项,删除等动作),弹出ActionBar让用户选择需要的操作;

            ActionMode am = startActionMode(new Callback() {                @Override                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {                    Log.e("tag", "onPrepareActionMode");                    menu.findItem(R.id.action_settings).setVisible(false);                    return true;                }                @Override                public void onDestroyActionMode(ActionMode mode) {                    Log.e("tag", "onDestroyActionMode");                }                @Override                public boolean onCreateActionMode(ActionMode mode, Menu menu) {                    Log.e("tag", "onCreateActionMode");                    getMenuInflater().inflate(R.menu.menu1, menu);                    return true;                }                @Override                public boolean onActionItemClicked(ActionMode mode,                        MenuItem item) {                    Log.e("tag", "onActionItemClicked");                    if (item.getItemId() == R.id.action_settings1) {                        am.finish();                    }                    return false;                }            });

在onPrepareActionMode中,我们也可以根据需要控制菜单项的显示;其它的一些点击事件等等和前面讲的ActionBar的操作相同;
这里需要注意的是ActionMode在finish之后,不能再次调用,否则会引发异常;

6。。。未完待续

http://blog.csdn.net/liu149339750/article/details/8282471

更多相关文章

  1. Android(安卓)Studio 加载 .so库出现couldn't find "*.so"
  2. Android(安卓)TextView文字超出一屏不能显示其它的文字 解决方案
  3. 如何用eclipse编译调试adnroid的Browser
  4. [置顶] Android系统移植与调试之------->如何修改Android设备添
  5. Android(安卓)DataBing详解
  6. Android(安卓)代码混淆问题
  7. Android中在string的xml文件中添加空白字符
  8. android定制化显示toast
  9. 仿微信-界面动画(5)ViewPager详解

随机推荐

  1. Android(安卓)自定义View(二)实现环形进度
  2. 【转】Android(安卓)性能测试
  3. Android(安卓)Studio下添加引用jar文件和
  4. OpenGL Mipmapping(Android(安卓)NDK)
  5. 来电归属地数据查询Java实现
  6. Android(安卓)Dex VS Class:实例图解剖析
  7. Android学习系列(34)
  8. 谷歌称Android(安卓)3.0系统可运行在任何
  9. Android(安卓)官方:Google Play 等服务仍
  10. Android(安卓)打包及引用 aar 文件的方法