ActionBar笔记

来源:互联网 发布:盐为什么国家控制知乎 编辑:程序博客网 时间:2024/06/08 17:31

Action Bar

介绍

  • Action Bar 是Google 在Android 3.0之后推出的一种全新用户操作方式
  • 目的是用来替换掉菜单按键功能,长按操作功能,提供一种全新的操作体验

ActionBar的组成

这里写图片描述

  1. 应用的图标标题部分:包含了 图标,主标题,副标题,回退部分
  2. 导航模式部分:这里显示的是导航模式中的List(导航模式有三种,标准,list,tab)
  3. Action button 部分: 用来响应用户的点击事件
  4. 溢出菜单部分:如果Action button拜访不下去了,会在此处显示

ActionBar 低版本的支持

  1. 导入Android Support V7 library
  2. 将Activity 继承 ActionBarActivity
  3. 给Activity 设置theme,主题需要是v7下的@style/Theme.AppComp.XXX

ActionBar标题图标部分

用来显示标题和回退的
相关Api的使用

        // 获取ActionBar        mActionBar = getSupportActionBar();        mActionBar.setTitle("MainTitle");// 设置主title部分        mActionBar.setSubtitle("SubTitle");// 设置子title部分        mActionBar.setIcon(R.drawable.ic_launcher);// 设置应用图标        mActionBar.setDisplayShowTitleEnabled(true);// 设置菜单 标题是否可见        mActionBar.setDisplayShowHomeEnabled(true);// 设置应用图标是否        mActionBar.setDisplayUseLogoEnabled(false);// 设置是否显示Logo优先        mActionBar.setDisplayHomeAsUpEnabled(true);// 设置back按钮是否可见

ActionBar的导航模式

  1. 标准模式。默认情况下就是标准模式
  2. List模式
    这里写图片描述

    • 通过ActionBar设置导航模式

      // actionBar的导航模式---ListmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    • 在List模式下设置数据的适配以及监听

          // 初始化数据    final List<String> objects = new ArrayList<String>();    objects.add("主页");    objects.add("新闻");    objects.add("娱乐");    // 创建adapter    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,                                                            android.R.layout.simple_list_item_1, objects);    // 创建监听    OnNavigationListener listener = new OnNavigationListener() {        @Override        public boolean onNavigationItemSelected(int itemPosition, long                                                itemId)        {            Toast.makeText(getApplicationContext(), objects.get(itemPosition) +                                                    "", Toast.LENGTH_SHORT).show();            return false;        }    };    // 给ActionBar设置List导航模式下的数据适配和监听    mActionBar.setListNavigationCallbacks(adapter, listener);
  3. Tab模式
    这里写图片描述

    • 通过ActionBar设置Tab模式

      // actionBar的导航模式---TABmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    • 在Tab模式下设置数据的适配以及监听

          final List<Tab> mTabs = new ArrayList<ActionBar.Tab>();    for (int i = 0; i < 3; i++)    {        //创建tab        Tab tab = mActionBar.newTab();        tab.setText("tab" + (i + 1));        tab.setIcon(R.drawable.ic_launcher);        mTabs.add(tab);        //设置Tab的监听        tab.setTabListener(new TabListener() {            @Override            public void onTabUnselected(Tab tab, FragmentTransaction ft)            {                Toast.makeText(getApplicationContext(), tab.getText() + "取消选中了",                                Toast.LENGTH_SHORT).show();            }            @Override            public void onTabSelected(Tab tab, FragmentTransaction ft)            {                Toast.makeText(getApplicationContext(), tab.getText() + "选中了",                                Toast.LENGTH_SHORT).show();            }            @Override            public void onTabReselected(Tab tab, FragmentTransaction ft)            {                Toast.makeText(getApplicationContext(), tab.getText() + "重新选中了",                                Toast.LENGTH_SHORT).show();            }        });        //将tab添加到actionBar中        mActionBar.addTab(tab);    }

Action button的相关操作

  1. 创建Action button

    • 复写 activity 的 onCreateOptionsMenu()方法

      @Overridepublic boolean onCreateOptionsMenu(Menu menu){    MenuInflater inflater = getMenuInflater();    // 将布局挂载到menu上    inflater.inflate(R.menu.main, menu);    return super.onCreateOptionsMenu(menu);}
    • 给menu创建对应的menu 的xml文件

      <menu xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:heima="http://schemas.android.com/apk/res-auto" >    <item        android:icon="@drawable/ic_action_call"        android:orderInCategory="100"        android:title="呼叫"        heima:showAsAction="ifRoom"/>    <item        android:icon="@drawable/ic_action_cancel"        android:orderInCategory="100"        android:title="取消"        heima:showAsAction="ifRoom"/></menu>

    低版本适配的说明:

    • 在menu对应的xml文件的根节点,需要声明 自定义命名空间:
      code
      xmlns:heima="http://schemas.android.com/apk/res-auto"
    • item中的属性 showAction 命名空间需要设置成自定义的

    ShowAction的取值说明:

    • always : 总是显示
    • ifroom : 如果放的下去,就显示(溢出菜单)
    • never : 从不显示
    • withText: 和文本一起显示
    • collapseActionView: 折叠显示

    Menu菜单的类型:

    • Group菜单
    • 子菜单
  2. 响应Action Button 事件

    • 复写onOptionsItemSelected()响应item事件
      @Overridepublic boolean onOptionsItemSelected(MenuItem item){    return super.onOptionsItemSelected(item);}

ActionBar Split显示

  • 在清单文件中给Activity添加属性
    xml
    android:uiOptions="splitActionBarWhenNarrow"

    低版本支持时需要在Activity中添加meta元数据的支持
    xml
    <meta-data
    android:name="android.support.UI_OPTIONS"
    android:value="splitActionBarWhenNarrow" />

Action Mode

这里写图片描述

  1. 呼出Action Mode功能

    startActionMode(Callback);

    低版本中

    startSupportActionMode(Callback);
  2. Action Mode的回调(Callback)

    // 创建action mode时的回调@Overridepublic boolean onCreateActionMode(ActionMode mode, Menu menu){    getMenuInflater().inflate(R.menu.action_mode, menu);    // 返回true说明有action mode    return true;}// 准备开始起时的回调@Overridepublic boolean onPrepareActionMode(ActionMode mode, Menu menu){    // TODO Auto-generated method stub    return true;}// action mode中的item被点击时的回调@Overridepublic boolean onActionItemClicked(ActionMode mode, MenuItem item){    return false;}//action mode 销毁时的回调@Overridepublic void onDestroyActionMode(ActionMode mode){    Toast.makeText(this, "关闭了", Toast.LENGTH_SHORT).show();}
0 0