ActionBar应用开发讲解

article/2025/11/7 9:23:46

1.    什么是操作栏(ActionBarandroid3.0及之后的版本添加的新特性):

 

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

    2)  我们可以选择可见的操作菜单可见项,不可见项会以下拉列表的形式呈现出来。

    3) ActionBar同时也为Fragment之间提供标签导航。

 

2.    操作栏的主要目的:

     i.         为了标识应用程序的商标和用户的位置而提供的一个专用空间。

    ii.         在不同的应用程序之间提供一致的导航和视觉体验。

   iii.         突出Activity的关键操作(如搜索创建共享,等),并且在可预见的方法内给用户提供快捷的访问。

如上图应用中的操作栏所示:从左边开始,依次是logo、导航选项标签和操作项(在右边插入的一个溢出菜单按钮)。

  注:此处的溢出菜单按钮是在添加过多的操作项时,而操作栏中没有足够的空间放置,系统会自动生成。值得注意的是,android4.0系统有虚拟键盘。也就是说,在手机硬件屏幕下方没有物理menua按钮时,才会自动生成溢出菜单栏,否则,溢出菜单不会自动生成,其余的操作项也只能通过物理menu按钮展现

 

3.    ActionBar的应用开发:

 

添加ActionBar:

 

1)     在实际应用开发者中,不需要导入ActionBar,因为在android3.0或者以上的版本中,ActionBar已经默认的包含在Activity中。

2)     从android3.0开始,ActionBar被包含在所有使用Theme.Holo主题的Activity中。

3)     当android:minSdkVersion或者android:targetSdkVersion属性被设置成11或者更高时,应用会被认为是android3.0版本(默认含有ActionBar)

4) 通过设置ActionBar的serDisplayShowHomeEanbled(false)和setDisplayShowTitleEanbled(fasle)禁用操作栏的图标和标题;

 

去除ActionBar:

 

1)     如果需要在自己开发的Acitivity中无操作栏,可以通过把主题设置为Theme.Holo.NoActionBar去除掉ActionBar,如:

<activity android:theme=”@android:style/Theme.Holo.NoActionBar”>

2)     同时也可以通过代码调用其hide()方法来实现,如下:

getActionBar.hide()当操作栏隐藏时,系统会调整Activity来填充当前有效的屏幕空间,可以通过getActionBar.show()来再次显示操作栏。

 

添加操作项(Action Item):

 

用户可以通过菜单栏中的操作项直接访问所需资源,操作项能够包含一个图标或文本标题。如果一个菜单项不能作为一个操作项显示,那么系统就会把它放到溢出菜单中。用户可以通过点击溢出菜单按钮显示其余的菜单。

可以这么理解,Action Item其实就是之前的旧版本中的MenuItem,只不过把它整合到ActionBar中了。所以,当系统首次启动时,系统会调用onCreateOptionsMenu()方法给Activity的ActionBar添加操作栏和溢出菜单。

通过代码添加操作栏:

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

   我们知道,菜单项是有图标和文本标题的,在代码中,通过setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)请求把一个菜单项作为一个操作项来显示。用这种方式,只有在有效的空间时,菜单项才能显示在操作栏中。如果没有足够的空间,这个菜单项会显示在溢出菜单中。

   如果你的菜单项支持标题和图标,那么默认情况下,操作项仅显示图标。如果你要显示文本标题,就要添加如下属性setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_WITH_TEXT)

    注:MenuItem.SHOW_AS_ACTION_WITH_TEXT值示意操作栏要显示文本标题。操作栏会尽可能的显示这个标题,但是,如果图标有效并且受到操作栏空间的限制,文本标题有可能显示不全。

   通过加载xml文件添加操作栏:

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

    

    menus.xml文件代码:

    

   在xml文件中,同样可以通过给<item>元素声明android:showAsAction=””(如android:showAsAction=”ifRooms”)属性实现操作项的属性(代码中通过setShowAsAction()方法设置)。

   当用户选择一个菜单时。Activity会接收一个onOptionsItemSelected()回调,要把android:id属性支持的ID传递给这个方法。

   给每个菜单项定义android:title属性是至关重要的,即使你没有给操作项声明标题,原因如下:

a)     如果操作栏中没有足够的空间来显示操作项,那么菜单项就会显示在溢出菜单中,并仅显示标题

b)     屏幕阅读器要给视障用户朗读菜单项标题;

c)     如果仅用图标来显示操作项,那么,用户能够长按这个项目,用操作项的标题来显示提示信息。

 

使用分离式操作栏:

 

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

 把操作栏分隔成独立的操作项,确保在窄屏设备上有合适的空间来显示所有的操作项,同时把导航条和标题元素留在顶部。

 代码实现:在manifest.xml文件中的<application>或<activity>元素添加uiOptions=”splitActionBarWhenNarrow”属性设置,启用分离式操作栏。

效果图如下:

 

使用应用程序图标导航:

 

  在上面的效果图的应用程序图标左侧会出现一个示意向左的箭头标,也就是说,应用图标可以当做操作项来使用。应用程序在这个图标上响应以下两个操作之一:

   1.   返回应用程序的“主”Activity必须调用setHomeButtonEnabled(true)方法

     例如,下列的onOptionsItemSelected()方法实现了返回应用程序的主Activity的操作

   上面的代码,当用户触摸应用程序图标时,会走onOptionsItemSelected()方法。android.R.id.home 为点击ActionBar对应的图标资源id;在case android.R.id.home这个响应中,你可以做任何你想做的事情,上面的代码是处理返回主Activity;

   注:Intent对象中要使用FLAGE_ACTIVITY_CLEAR_TOP标识,如果当前页面跳转到主Activity或者前一个Activity,那么所有在其上的activity都会被销毁,然后主Activity或前一个Activity回到栈顶,而不用从新再创建已存在在堆栈中的Activity的新实例。

  如果不设置这个标识,当向上导航后,再按回退按钮,实际上会转到下级界面,而不是返回到原来的界面或者手机桌面。

  还有一种情况,在用户从另一个应用程序进入当前的Activity的情况下,你可能需要添加FLAG_ACTIVITY_NEW_TASK标识。这个标识确保在用户返回主页或上级页面时,新的Activity不会被添加到当前任务中,而是在属于你自己的应用程序的任务中启动。例如,如果用户通过被另一个应用程序调用的Intent对象启动了你的应用程序中的一个Activity,那么选择操作栏图标来返回主页或上级页面时,FLAG_ACTIVITY_CLEAR_TOP标识会在属于你的应用程序的任务中启动这个Activity(不是当前任务)。系统既可以用这个新的Activity做根Activity来启动一个新的任务,也可以把存在后台的拥有这个Activity实例的一个既存任务带到前台来,并且目标Activity会接受onNewIntent()回调。因此,如果你的Activity要接收另一个应用程序的Intent对象,那么通常应该给这个Intent对象添加FLAG_ACTIVITY_NEW_TASK标识,如:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

2.  向应用程序上级页面导航

  要使应用程序图标能够向上导航,就要在ActionBar中调用setDisplayHomeAsUpEnabled(true)方法。

 

添加操作视窗:

 

1.     可以添加一个视图作为一个Action Item。通过在xml元素的android:actionLayout属性制定我们希望现实布局资源的ID(例如@layout/mysearchview)

2.     也可以选择添加android:actionViewClass属性(menus.xml文件中<item>的属性)分配与完全限定的类名描述我们想要显示的视图(例如android:actionViewClass=”android.widget.SearchView”)

  android.widget.SearchView是系统内置的搜索框视图,效果图如下:

  上图为折叠和展开的搜索视窗的操作栏

        通过给android:showAsAction属性添加“collapseActionView”属性值,能够让操作视窗可以折叠起来。如果需要,同时也可以在代码中通过expandActionView()collapseActionView()方法来展开或折叠操作视窗。

 

添加导航选项标签(tab选项):

 

1.    ActionBar可以现实选项卡供用户切换浏览该Activity中不同的Fragment

注:添加导航选项标签,必须给调用ActionBarsetNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

2.    每个标签都可以是一个图标或文本标题

要使用选项标签在Fragmengt之间切换,必须在每次选择一个选项标签时执行一个Fragment事务。

 添加选项标签的基本过程如下:

         i.         实现ActionBar.TabListener接口。这个接口中回调方法会响应选项标签上的用户事件,以便你能够切换Fragment对象;

        ii.           对于每个要添加的选项标签,都要实例化一个ActionBar.Tab对象,并且调用setTabListener()方法设置ActionBar.Tab对象的事件监听器。还可以用setText()setIcon()方法来设置选项标签的标题或图标。

       iii.          通过调用addTab()方法,把每个选项标签添加到操作栏。

 在实现ActionBar.TabListener接口的类中必须重写onTabSelected()onTabUnselected()onTabReselected()方法来关联Fragment,在这三个方法中实现Tab标签被选中、非选中、重新选中时是所需处理的事务操作。

效果图如下:

 

添加下拉式导航:

 

  作为Activity内部的另一种导航(或过滤)模式,操作栏提供了内置的下拉列表。下拉列表能够提供Activity中内容的不同排序模式。

  启用下拉式导航的基本过程如下:

1.    创建一个给下拉提供可选项目的列表,以及描画列表项目时所使用的布局;

2.    实现ActionBar.OnNavigationListener回调,在这个回调中定义当用户选择列表中一个项目时所发生的行为;

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

4.    调用setListNavigationCallbacks()方法给下拉列表设置回调方法,如:

     actionBar.setListNavigationCallbacks(mSpinnerAdapter,mNavigationCallback);

    这个方法需要SpinnerAdapterActionBar.OnNavigationListener对象作为参数。

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

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

    通过该方法实现处理点击相应的下拉导航菜单选项的响应。

效果图如下:

 

添加共享组件:

 

 在ActionBar里实现一个高效的分享操作变得更简单了。ActionProvider,一旦附加到一个ActionBar的菜单项后,可以同时处理此菜单项的外观和行为。在ShareActionProvider中,你只需要提供一个intent对象,剩下的操作就由它来替你完成。、

1.     更新菜单的声明:

我们在菜单资源文件里定义带有一个android:actionProviderClass 属性的item,如下的代码片段:

这个代理类负责ShareActionProvider的外观及功能。然而你仍然需要告知provider你想要分享什么东西。

2.     设置Share Intent

   使用ShareActionProvider,必须提供一个intent,同时这个intent需要声明ACTION_SEND和表示数据的extras(如EXTRA_TEXT、 EXTRA_STREAM);

   指定一个share intent时,首先要找到相应的MenuItem,同时将Activity或者是Fragment中的菜单资源展开。然后,调用MenuItem.getActionProvider()获取一个ShareActionProvider的实例,再调用setShareIntent()分享与那个action item相关联的share intent。

代码片段如下:

   需要注意是,如果一个应用程序需要接受Share Intent发送的共享数据,那么需要在该应用程序的Manifest.xml文件中定义<intent-filter/>元素,指明应用组件想要接受的intent。例如,针对上面发送的共享数据,另一个接收数据应用的Manifest.xml文件应注册intent-filter如下:

    在给应用的Manifest.xml注册相关的intent-filter后,在ShareActionProvider相关联的Action Item里将出现相应的该应用可供选择共享图标及标题;

下图为效果图:

 

上下文操作栏(ContextActionBar)

 

  上下文操作栏不比跟操作栏关联,它们独立地操作,上下文操作栏甚至可以显示在操作栏位置之上。

对于那些提供上下文操作的View对象,你通常应该在以下两种事件之上调用上下文操作模式:

1. 用户在View对象上执行一个长按(long-click)操作。

2. 用户选择了一个复选框或View对象中类似复选框的UI组件。

 

应用程序如何调用上下文操作模式,并给每个操作定义行为,依赖于你的设计。有以下两种基本的设计:

1.    针对个别的、任意的View对象的上下文操作:

     i.         实现ActionMode.Callback接口。在它的回调方法中,你能够针对上下文操作栏指定动作,在操作项目上响应点击事件和处理针对这个操作模式的其他生命周期事件。

 

    ii.         在显示这个操作栏时,调用startActionMode()方法,参数为实现ActionMode.Callback接口类的对象(如用户长按(long-click)对应的view对象时,调用该方法显示上下文操作栏)。

如:

       a)  实现ActionMode.Callback接口:

       

       b)  在适当的时机调用startActionMode()方法启用上下文操作模式,如在响应一个View对象(Button)的长按事件时:

      

     当调用startActionMode()方法时,系统返回被创建的ActionMode对象。通过把这个对象保存在一个成员变量中,能够在对其他事件的响应中对上下文菜单进行改变。

   效果图如下:

  

2. 针对ListViewGridView对象中项目组的批处理上下文操作(允许用户选择多个项目,并这些选择的项目上执行一个操作):

   如果在ListView或GridView对象(或是另外的AbsListView类的扩展)中有一个项目的集合,并且想要允许用户对其执行批处理操作,那么应该按如下的方法:

    i.         实现AbsListView.MultiChoiceModeListener接口,并且要用setMultiChoiceModeListener()方法把它设置给ViewGroup对象。在这个监听器的回调方法中,你能够给这个上下文操作栏指定动作,响应在操作项目上的点击事件,并且处理从ActionMode.Callback接口中继承来的其他回调方法。

   ii.         ViewGroup对象调用带有CHOICE_MODE_MULTIPLE_MODAL参数的setChoiceMode()方法。

   当用户用长按事件选择一个项目时,系统会调用onCreateActionMode()方法,并显示带有特定操作的上下文操作栏。同时在上下文操作栏显示时,用户还能继续选择其他的项目。

  效果图如下:

   

接口回调方法讲解:

onItemCheckedStateChanged :处于选择模式,一个选项被选择或取消选择时此方法被调用。

onActionItemClicked:用户点击一个动作按钮时调用

onCreateActionMode:上下文操作模式第一次被创建时调用

onDestroyActionMode:当一个上下文操作模式被退出或销毁时调用

onPrepareActionMode:当一个上下文操作模式的动作菜单无效时,将其重新刷新时调用

 

本文 相关的Demo代码下载:http://download.csdn.net/detail/stevenhu_223/4613789


http://chatgpt.dhexx.cn/article/PaKAvvBY.shtml

相关文章

超详细!ActionBar 使用·详解

一、ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外&#xff0c;Action Bar也是一个非常重要的交互元素&#xff0c;Action Bar取代了传统的tittle bar和menu&#xff0c;在程序运行中一直置于顶部&#xff0c;对于Android平板设备来说屏幕更大它的标题使用Action…

Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc&#xff0c;我翻译之后又做了些加工&#xff0c;英文好的朋友也可以直接去读原文。 http://developer.android.com/guide/topics/ui/actionbar.html…

Android自定义ActionBar

Android 3.0及以上已经有了ActionBar的API&#xff0c;可以通过引入support package在3.0以下的平台引用这些API&#xff0c;但这儿呢&#xff0c;完全自定义一个ActionBar&#xff0c;不用引入额外jar包&#xff0c;参照的是开源的UI组件GreeenDroid&#xff0c;项目主页&…

什么是ActionBar,详细讲解

更详细讲解 https://blog.csdn.net/b1480521874/article/details/90812777 一、什么是ActionBar 有图有真相&#xff0c;看一下图片就了解的差不多了 对于大多数应用&#xff0c;操作栏可以分割为 4 个不同的功能区域。 <1> 应用图标 ActionBar的图标&#xff0c;可显示…

Android ActionBar的基本用法

本文翻译了这篇文章&#xff1a;Using the Android action bar (ActionBar) - Tutorial 1、ActionBar的简介 ActionBar位于Activity的顶部&#xff0c;可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。 ActionBar 是在Android 3.0(AP…

Android UI开发详解之ActionBar

在Android3.0之后&#xff0c;Google对UI导航设计上进行了一系列的改革&#xff0c;其中有一个非常好用的新功能就是引入的ActionBar&#xff0c;他用于取代3.0之前的标题栏&#xff0c;并提供更为丰富的导航效果。 一、添加ActionBar 1、不需要导入ActionBar&#xff0c;因为…

超详细!ActionBar使用详解

转自:https://www.cnblogs.com/mjsn/p/6150824.html 一、ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外&#xff0c;Action Bar也是一个非常重要的交互元素&#xff0c;Action Bar取代了传统的tittle bar和menu&#xff0c;在程序运行中一直置于顶部&#xff0c…

ActionBar

ActionBar是3.0之后出现的控件&#xff0c;取代menu&#xff0c;显示在标题栏位置。根据我的经验&#xff0c;menu尽量不要使用&#xff0c;很多用户都是小白&#xff0c;根本就不知道menu这个按键有什么用&#xff0c;也不会去点击这个按键。 通过getActionBar()得到对象。 …

什么是ActionBar

原文地址:http://www.2cto.com/kf/201307/229693.html 一、什么是ActionBar 有图有真相&#xff0c;看一下图片就了解的差不多了 对于大多数应用&#xff0c;操作栏可以分割为 4 个不同的功能区域。 1. 应用图标 应用图标是您应用的标志。在应用图标位置摆放您自己的 logo。注意…

Android ActionBar应用实战,高仿微信主界面的设计

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习&#xff0c;我想大家对ActionBar都已经有一个相对较为深刻的理解了。唯一欠缺的是&#xff0c;前面我们都只是学习了理论知识而已&#xff0c;虽然知识点已经掌握…

Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc&#xff0c;我翻译之后又做了些加工&#xff0c;英文好的朋友也可以直接去读原文。 http://developer.android.com/guide/topics/ui/actionbar.html…

Android学习:ActionBar简介

目录 PART1:介绍 PART2&#xff1a;系统默认Actionbar用法简介 1.在onCreate中设置Actionbar 2 . **为Actionbar添加菜单项 ** 3 . Actionbar样式自定义 4.导航栏结构 5.ActionBar中添加下拉菜单 6.配置导航栏 PART1:介绍 ActionBar是Android 3.0以后Anrdoid系统增加的…

栈与队列的区别

1、队列先进先出&#xff0c;栈先进后出。 2、对插入和删除操作的"限定"不同。 栈是限定只能在表的一端进行插入和删除操作的线性表。 队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。 3、遍历数据速度不同。 栈只能从头部取数据&…

栈和队列详解(C语言)

栈和队列 栈队列力扣笔试题 栈 栈是什么&#xff0c;栈是一种数据存储的结构&#xff0c;采用的是先进后出&#xff0c;后进先出的原则&#xff0c;就好像是弹匣里的子弹&#xff0c;比如说一个弹匣有30发容量&#xff0c;那第一个发压进去的子弹肯定是最后一个射出的&#xf…

栈和队列定义与特点

栈和队列定义与特点 1、栈&#xff08;stack&#xff09;1.1 栈的定义和特点1.2 栈的应用 2、队列(queue)2.1 队列的特点2.2 队列的应用 1、栈&#xff08;stack&#xff09; 1.1 栈的定义和特点 栈是仅在表尾进行插入、删除操作的线性表&#xff08;最后插入的会被最先删除&…

栈和队列的详解

目录 1. 栈的基本概念 1.1 栈的定义 1.2 栈的存储结构 1.3 栈的数学性质 2. 栈的基本操作 2.1 顺序栈定义 2.2 链式栈结点定义 3 栈输入输出的合理性 4 栈的全部输出结果 5 栈的相关应用 5.1 括号匹配 5.2 进制转化 6 队列的基本概念 6.1 队列的定义 6.2 队列…

【使用两个栈实现队列】

文章目录 一、栈和队列的基本特点二、基本接口函数的实现1.栈的接口2.创建队列骨架3.入队操作4.取出队列元素5.返回队首元素6.判断队列是否为空7.销毁队列 总结 一、栈和队列的基本特点 栈的特点是后进先出&#xff0c;而队列的特点是先进先出。 使用两个栈实现队列&#xff0…

【栈和队列】java实现栈和队列以及集合中的栈和队列

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#x1f3cd;&#x1f3cd;&#x1f3cd;&#xff0c;今天我带领大家去学习栈和队列的相关知识&#xff0c;&#x1f49e;&#x1f49e;&#x1f49e;栈和队列在数据结构中是相对简单的&#xff0c;但是应用还是蛮多的&#xff…

数据结构——栈和队列

目录 一、栈 1.栈的概念及结构栈 2.栈的实现 二、队列 1.队列的概念及结构队列 2.队列的实现 一、栈 1.栈的概念及结构栈 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。不同于我们所说的栈区&#xff0c;栈是一种数据结构&#xff0c;栈区…

C语言栈和队列的实现

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转数据结构 &#x1f4ac;推荐…