• Android ActionBar 使用详解


    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

  • 相关阅读:
    常用js脚本
    lotus支持的java版本
    解决传递中文参数乱码问题
    Lotus的金额大小写转换
    lotus designer 8.5中创建JAVA代理
    一步一步带你进入Java世界(一)_Java环境配置
    实例 XPages 开发一个通用的 Dojo Tree 风格定制控件
    LOTUS中B/S开发初学者问题收集
    Lotus问题收集
    R6中文参数乱码解决
  • 原文地址:https://www.cnblogs.com/a284628487/p/3714793.html
Copyright © 2020-2023  润新知