Android中ActionBar的使用

摘要:
ActionBar是一个显示在屏幕顶部的控件,它包括左侧显示的应用程序徽标图标和右侧操作菜单的可见项。添加方法参数说明:groupId:指组ID,用于批量处理和排序菜单子项itemId:指子项ID,这是每个菜单子项顺序的唯一标识符:指定菜单子项在选项菜单标题中的排列顺序:菜单标题setShowAsAction方法参数描述setShowAsAction:始终在ActionBar上显示菜单项。SetShowAsAction:在ActionBar上显示MenuItem,并在屏幕水平时显示其文本。使ActionItem具有子菜单@OverridepublicpoolannCreateOptionsMenu{//TODOAutogeneratedmethodstubsuper.onCreateOptionsMenu;MenuItemadditem=menu.add;MenuItemsdeleteItem=menu.aadd;additem.setShowAsAction;deleteItem.setShowAs Action;SubMenumoremenu=menu.addSubMenu;//更多包含子菜单moremenu.add; 更多菜单项。setShowAsAction;returntrue;}以下效果:使用XML文件添加ActionItem1。XML代码如下:˂?

ActionBar是一个显示在屏幕顶部的控件,它包括了在左边显示的应用的logo图标和右边操作菜单的可见项。

ActionBar的基本操作

  • 启用ActionBar

Android3.0版本已经默认使用了ActionBar,因此只要在Mainifest.xml中配置的targetSdkVersion高于11(Android3.0),则默认会使用ActionBar。

<uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="14" />
  • 关闭ActionBar

如果希望关闭ActionBar,我们可以在Mainifest.xml设置application或者activity的主题为NoActionBar即可:

<application
        android:theme="@android:style/Theme.Holo.NoActionBar" >
<activity
        android:theme="@android:style/Theme.Holo.NoActionBar">
  • 获得ActionBar对象
 ActionBar actionbar = getActionBar();
  • 显式和隐藏ActionBar
actionbar.show();  //显示
 actionbar.hide();  //隐藏
  • 隐藏ActionBar栏中的标题和图标
actionbar.setDisplayShowHomeEnabled(false);  //隐藏图标
actionbar.setDisplayShowTitleEnabled(false);  //隐藏标题

使用代码添加ActionItem

在Activity中重写onCreateOptionsMenu(Menu menu)方法:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
         super.onCreateOptionsMenu(menu);
         MenuItem additem =menu.add(0, 1, 0, "add"); 
         MenuItem deleteitem =menu.add(0, 2, 1, "delete");
         MenuItem openitem =menu.add(0, 3, 2, "open");
         additem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         deleteitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         openitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         return true;
    }

如下效果:

image

ps.从代码看出,我们是通过add方法添加菜单条目,然后通过setShowAsAction方法把菜单条目作为ActionBar的操作项显示。

  • add方法参数说明:

groupId:是指组ID,用以批量地对菜单子项进行处理和排序

itemId:是子项ID,是每一个菜单子项的唯一标识

order:指定菜单子项在选项菜单中的排列顺序

titler: 菜单标题

  • setShowAsAction方法参数说明

setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS): 始终将该MenuItem显示在ActionBar上。

setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM) :只有在有足够空间时才显示,否则放入到溢出菜单中。

setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT) : 将该MenuItem显示在ActionBar上,且横屏时显示其文本。

setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) : 把该MenuItem放入menu键的普通菜单项中。

使某个ActionItem有子菜单

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
         super.onCreateOptionsMenu(menu);
         MenuItem additem =menu.add(0, 1, 0, "add");
         MenuItem deleteitem =menu.add(1, 2, 1, "delete");
         additem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         deleteitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        
         SubMenu moremenu =menu.addSubMenu(2,3,2,"more");  //more包含子菜单
          moremenu.add("open");
         moremenu.add("close");
         MenuItem moremenuitem = moremenu.getItem(); 
         moremenuitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         return true;
    }

如下效果:

image

使用XML文件添加ActionItem

1、xml代码如下所示:

<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:id="@+id/menu_save"  
          android:icon="@android:drawable/ic_menu_add"  
          android:title="menu_save"  
          android:showAsAction="always|withText" />  
     <item android:title="more"
           android:icon="@android:drawable/ic_menu_info_details"  
            android:showAsAction="always">
         <menu>
            <group android:checkableBehavior="none">
                    <item android:id="@+id/menu_save1"  
                  android:title="关于"  
                  android:showAsAction="always|withText" />  
                    <item android:id="@+id/menu_save2"  
                  android:title="建议"  
                  android:showAsAction="always|withText" />  
            </group>
            </menu>
    </item>     
</menu>

2、在Activity中重写onCreateOptionsMenu(Menu menu)方法:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
         super.onCreateOptionsMenu(menu);
         MenuInflater inflater =getMenuInflater();
         inflater.inflate(R.menu.mymenu, menu);  //加载menu文件
          return true;
    }

效果如下所示:

image

使用分离式操作栏

当启用分隔操作栏模式时,在屏幕的底部会显示一个独立的横条,用于显示Activity在在窄屏设备(如竖屏手机)上运行时的所有操作项。

只需要在Mainifest.xml中设置application或者activity的uiOptions即可:

<application
        android:uiOptions="splitActionBarWhenNarrow"
        >

效果如下所示:

image

使用应用程序图标导航

应用图标可以当做操作项来使用。应用程序在这个图标上响应以下两个操作之一:

  •   返回应用程序的主Activity

1、首先必须调用setHomeButtonEnabled(true)方法,这时图标会多一个箭头,图标处于可被点击状态。

actionbar.setDisplayHomeAsUpEnabled(true);

 2、然后重写onOptionsItemSelected()方法实现返回应用程序的主Activity的操作

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
         super.onOptionsItemSelected(item);
         switch (item.getItemId()) {
         case android.R.id.home:                          
            Intent intent =new Intent(this,MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
             return true;
        default:
            return super.onOptionsItemSelected(item);
        }

    }
  • 向应用程序上级页面导航
actionbar.setDisplayHomeAsUpEnabled(true);

然后重写onOptionsItemSelected()方法实现返回应用程序的上一个Activity的操作(代码相似,略)

ps.addFlags的几个参数就是和Activity的四种加载模式相关了。

添加操作视窗(Action View)

只需要在menu文件的item中添加android:actionViewClass(或者也可以自己定义布局文件)即可

<item android:id="@+id/menu_save"  
          android:icon="@android:drawable/ic_menu_add"  
          android:title="menu_search"  
          android:showAsAction="always|withText"
          android:actionViewClass ="android.widget.SearchView"
           />

点击搜索图标后效果如下所示:

image

ps.如果需要,同时也可以在代码中通过expandActionView()和collapseActionView()方法来展开或折叠操作视窗。

使用ActionBar实现Tab导航

1、首先设置action的导航模式并加入几个tab:

actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionbar.addTab(actionbar.newTab().setText("首页").setTabListener(this));
actionbar.addTab(actionbar.newTab().setText("内容").setTabListener(this));
actionbar.addTab(actionbar.newTab().setText("问题").setTabListener(this));

2、然后实现ActionBar.TabListener接口。这个接口中回调方法会响应选项标签上的用户事件(可用于Fragment的切换)

@Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        Toast.makeText(this, String.valueOf(tab.getText()), Toast.LENGTH_LONG).show();
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        
    }

效果如下图所示:

image

添加下拉式导航

1、调用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)方法启用操作栏下拉式导航模式。

2、actionBar.setListNavigationCallbacks(mSpinnerAdapter,mNavigationCallback);

其中mSpinnerAdapter作为适配器加载导航列表中所需要的列表选项布局资源。

     mNavigationCallback实现ActionBar.OnNavigationListener接口,覆写onNavigationItemSelected()方法,

添加共享组件

在ActionBar里可以通过ActionProvider很快的实现共享操作。在ShareActionProvider中,你只需要提供一个intent对象,剩下的操作就由它来替你完成。

1、首先为分享的条目设置android:actionProviderClass属性

<item android:title="share"
           android:icon="@android:drawable/ic_menu_share"  
            android:showAsAction="always"
            >
         <menu>
            <group android:checkableBehavior="none">
                    <item android:id="@+id/kongjian"  
                  android:title="空间"  
                  android:showAsAction="always|withText" 
                  android:actionProviderClass="android.widget.SharedActionProvider"
                  />  
                    <item android:id="@+id/renren"  
                  android:title="人人"  
                  android:showAsAction="always|withText" 
                  android:actionProviderClass="android.widget.SharedActionProvider"
                  />  
            </group>
            </menu>
    </item>

2、重写onOptionsItemSelected(MenuItem item)方法,为每个分享条目指定对应的intent

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        ShareActionProvider mShareActionProvider;
         super.onOptionsItemSelected(item);
         switch (item.getItemId()) {
         case android.R.id.home:                          
            Intent intent =new Intent(this,MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
             return true;
         case R.id.kongjian:
             mShareActionProvider=(ShareActionProvider)item.getActionProvider();
             mShareActionProvider.setShareIntent(kongjianintent);
         case R.id.renren:
             mShareActionProvider=(ShareActionProvider)item.getActionProvider();
             mShareActionProvider.setShareIntent(renrenintent);
        default:
            return super.onOptionsItemSelected(item);
        }

    }

免责声明:文章转载自《Android中ActionBar的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGIS Server常见问题之一close函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android_广播

BroadcastReceiver 一,概述 使用场景: 1.同一app内部的组件之间的消息通信 2.同一app不同进程之间的消息通信 3.不同app之间的组件之间消息通信 4.Android系统与app之间的消息通信 实现原理:观察者模式,基于消息的发布/订阅事件模型。 实现流程(大致): 1.接受者通过Binder机制向AMS(Activity Man...

unity重写软键盘for Android NGUI

一 原因 以为某些原因,需要重写Unity游戏中Android的软键盘的样式,然而unity对android和ios的ios的软键盘都有封装,在Unity中TouchScreenKeyboard.Open可以打开一个软键盘,然而对这个软键盘的操作函数少的可怜,所以有了这篇文章. 二 目的 本文的主要目的是重写NGUI的UIInput,也就是TouchScr...

android app 压力测试工具-monkey tool

一.什么是Monkey?Monkey测试是Android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进...

R语言中判断是否是整数。以及读写excel

今天接手一个重复性工作, 需要手工把产品运营们在excel里写的活动规则, 插入数据库表中。为了减少出错, 提高效率。 再加上最近刚刚学R语言, 就用R练练手, 自动生成mysql的sql语句。 一次性提交。 刚才就是判断一个值是否是整数折腾了一小会儿。后来发现R判断这个很简单。 就是as.integer(money) != as.numeric(mone...

Calendar Provider

英文原文:http://developer.android.com/guide/topics/providers/calendar-provider.html 关键类 CalendarContract.Calendars CalendarContract.Events CalendarContract.Attendees CalendarContrac...

ShortcutBadgerDemo【安卓应用角标(badge)实现方案】

 版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 本文主要使用的开源库是 leolin310148/ShortcutBadger,但是在其基础上做了一些修改。 什么是应用角标? 1、角标,英文名badge,即桌面上显示未读消息的小数字,原ios功能,Android原生并没有该功能。(原生的Android系统,是不支持应用角标的) 应用角...