Android学习:ActionBar简介

article/2025/11/7 10:57:42

目录

PART1:介绍

PART2:系统默认Actionbar用法简介

1.在onCreate中设置Actionbar

2 . **为Actionbar添加菜单项 **

3 . Actionbar样式自定义

4.导航栏结构

5.ActionBar中添加下拉菜单

6.配置导航栏


PART1:介绍

ActionBar是Android 3.0以后Anrdoid系统增加的导航栏功能控件。它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等功能。使用ActionBar的好处是,它可以给提供一种全局统一的UI界面,使得用户在使用任何一款软件时都懂得该如何操作,并且ActionBar还可以自动适应各种不同大小的屏幕。由于ActionBar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的话则需要引入Support Library。

PART2:系统默认Actionbar用法简介

首先介绍在Android 3.0以上的系统中使用系统默认的Actionbar的使用方法。在3.0以上的系统中,通过直接集成最基础的Activity即可使用Actionbar。

1.在onCreate中设置Actionbar

home键即ActionBar上指向左边的箭头

ActionBar actionBar = getActionBar();
if (actionBar != null) {actionBar.setLogo(R.drawable.ic_logo);//自定义logoactionBar.setDisplayUseLogoEnabled(true);//使能用户自定义logoactionBar.setHomeButtonEnabled(true);//设置actionBar的Home键可点击
}

在子界面中我们可以配置返回上一级的操作,此时actionbar中会多出一个返回箭头。onCreate中可以做如下的操作:

mActionBar = getActionBar();
if (mActionBar != null){mActionBar.setDisplayHomeAsUpEnabled(true);//设置Home按键作为返回上一级mActionBar.setDisplayShowHomeEnabled(false);//不显示Home键Icon
}

另外还需要在AndroidManifest.xml的Activity中配置android:parentActivityName属性。

<activityandroid:name="SubActivity"android:parentActivityName="ParentActivity"/>

2 . **为Actionbar添加菜单项 **

首先需要在res/menu/下新建一个menu文件menu_set.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"tools:context="com.test.test.MainActivity"><itemandroid:id="@+id/refresh"android:orderInCategory="100"android:title="/刷新"android:icon="@drawable/ic_refresh"android:showAsAction="always"/><itemandroid:id="@+id/setting"android:orderInCategory="100"android:title="设置"android:icon="@drawable/ic_settings"android:showAsAction="ifRoom"/><itemandroid:id="@+id/play"android:orderInCategory="100"android:title="退出"      android:icon="@drawable/ic_exit"android:showAsAction="never"/>
</menu>

Menu 标签中 Item 标签的主要属性包括:

属性名定义
android:orderInCategory表示每个 item 的优先级,值越大优先级越低, actionbar 地方不够就会放到 overflow 中
android:titleitem 的标题
android:icon
item 显示的图标
android:showAsActionitem 显示的方式

其中 showAsAction 属性接包含以下一些定义

属性说明
ifRoom会显示在 Item 中,但是如果已经有 4 个或者 4 个以上的 Item 时会隐藏在溢出列表中。当然个数并不仅仅局限于 4 个,依据屏幕的宽窄而定
never永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义 item 的时候,最好把标题都带上
always无论是否溢出,总会显示
withTextwithText 值示意 Action bar 要显示文本标题。 Action bar 会尽可能的显示这个标题,但是,如果图标有效并且受到 Action bar 空间的限制,文本标题有可能显示不全
collapseActionView声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是不可见的。一般要配合 ifRoom 一起使用才会有效果

定义好menu配置文件后,在代码中加载menu。

public boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu_set, menu);return true;}

而通过重写onOptionsItemSelected,即可对相应菜单的select事件进行处理。
在一些有物理菜单按钮的机器上,默认情况下overflow按钮可能会出现显示不出来的情况,通过onCreate中调用以下函数即可显示出来。

/*** 即使有物理菜单键也显示ActionBar的flowMenu*/
public static void showOverflowMenu(Context context) {try {ViewConfiguration config = ViewConfiguration.get(context);//使用java反射技术,获取getDeclaredField类的私有属性sHasPermanentMenuKeyField menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");if(menuKeyField != null){menuKeyField.setAccessible(true); //将属性设为可访问的menuKeyField.setBoolean(config, false);  //为属性赋值为false}} catch (Exception e) {e.printStackTrace();}
}

3 . Actionbar样式自定义

<style name="AppThemeBase" parent="android:Theme.Holo"><item name="android:actionOverflowButtonStyle">@style/actionbar_overflow</item>//overflow按钮样式,即最右边点击弹出隐藏菜单项的按钮<item name="android:actionBarStyle">@style/actionbar_style</item>//actionbar样式<item name="android:homeAsUpIndicator">@drawable/icon_back</item>//设置上一级按钮图标资源<item name="android:windowActionBarOverlay">true</item>//设置actionbar悬浮显示
</style>
<style name="actionbar_overflow" parent="@android:style/Widget.Holo.ActionButton.Overflow"><item name="android:src">@drawable/ic_overflow</item>//设置overflow按钮图标
</style>
<style name="actionbar_style" parent="@android:style/Widget.Holo.ActionBar"><item name="android:background">@color/backgnd</item>//设置actionbar背景颜色,可以设置为半透明的颜色<item name="android:titleTextStyle">@style/actionbar_title_text</item>//设置标题文字样式
</style>
<style name="actionbar_title_text" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"><item name="android:textSize">18dp</item>//设置文字大小
</style>

4.导航栏结构

1、 区域1App icon:主要用于展示App的Logo显示应用程序的icon,或者自己定义的任何图片以及应用程序的名称(title)或者任何自定义的标题。如果当前界面不是一级界面,还可以展示返回导航。

2、(区域2View Control:用于切换不同的视图或者展示非交互信息如app标题等。

ActionBar 主要有三种导航模式

 <1>standard(默认)这种导航模式下,这个区域没有起作用

 <2>list这种模式下,这个区域显示为一个下拉列表,可以为列表的每一个选项设计一个页面显示

 <3>tab这种模式下,这个区域没有起作用,但是在ActionBar的下方会嵌入Tab式的导航视图,用户可以通过tab进行页面切换

3、区域3  Action Buttons:用于展示app中最重要的操作按钮,如果过多actionbar中放不下则会转移到Action overflow中,长按会展示操作名称。根据文档说明,Action Buttons的总宽度不会超过ActionBar的50%。

4、 区域4 Action overflow:用于存放展示相对较少使用的操作按钮,要是表示还有没有显示完的Action Buttons

图标的显示受以下因素影响

<1>menu items的showAsAction的影响,如果设置为never,那么点击这个图标,items就会显示。如果设置为ifRoom,但是Action Items区域已经没有足够的区域来显示这个items,那么这个items,就不会在ActionBar上显示,点击这个图标,这个items才会显示出来。

<2>menu items 的数量,如果所有的items已经全部显示在actionbar上了,那么就没有还没有显示的items了,这个图标就没有必要显示了。

总的说来,这个图标就是显示溢出的items,这个溢出的条件是由items的数量以及showAsAction 属性决定的。

5.ActionBar中添加下拉菜单

在ActionBar中添加下拉菜单,主要有一下几个关键步骤:

1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项

2. 实现ActionBar.OnNavigationListener接口,当点击ActionBar的菜单项是进行相应的操作

3.调用setNavigationMode()方法将ActionBar的操作模型设置为ActionBar.NAVIGATION_MODE_LIST. 注意:这个步骤应该在Activity的onCreate()回调函数时执行

4. 调用setListNavigationCallbacks()方法为ActionBar添加适配器和监听器.

6.配置导航栏

         ActionBar.DISPLAY_SHOW_HOME:设置显示logo和icon图标。

         ActionBar.DISPLAY_SHOW_TITLE:表明activity的标题和子标题

         Actionbar.DISPLAY_SHOW_custom:展示定制的视图如果被设置了

//设置导航栏的样式(ActionBar.DISPLAY_SHOW_HOME:设置显示logo和icon图标。//                ActionBar.DISPLAY_SHOW_TITLE:表明activity的标题和子标题//                Actionbar.DISPLAY_SHOW_custom:展示定制的视图如果被设置了mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);


http://chatgpt.dhexx.cn/article/4HYjS8UR.shtml

相关文章

栈与队列的区别

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;推荐…

栈和队列讲解

目录 1、栈 &#xff08;1&#xff09;栈的概念及结构 &#xff08;2&#xff09;栈的实现 2、队列 &#xff08;1&#xff09;队列的概念及结构 &#xff08;2&#xff09;队列的实现 前言&#xff1a;栈和队列是在顺序表和链表的延伸&#xff0c;如果前面的顺序表和链…

栈和队列(C++)

栈的相关概念 栈是仅在表尾进行插入&#xff0c;删除操作的线性表 表尾称为栈顶Top&#xff0c;表头称为栈底Base 插入元素到栈顶&#xff0c;称为入栈&#xff1b;从栈顶删除最后一个元素&#xff0c;称为出栈 栈的运算规则&#xff1a;先进后出 一.顺序栈 顺序栈的表示 …

栈和队列的基本操作(栈和队列的区别)

数据结构中的栈与内存中的栈的不同 一、数据结构中的堆栈 在数据结构中的堆栈&#xff0c;实际上堆栈是两种数据结构&#xff1a;堆和栈。堆和栈都是一种数据项按序排列的数据结构。 1.栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧&#xff0c;它是一种具有后进先…

栈和队列——python

目录 一、栈 定义一个栈 栈的应用——括号匹配问题 栈的应用——迷宫问题 二、队列 自定义队列 python队列的内置模块 队列应用——打印文件后五行 队列应用——迷宫问题 python的数据结构与算法之栈与队列 自学视频&#xff1a;bilibili路飞学城清华大学博士讲解Pyt…

栈和队列的概念

文章目录 栈、队列和双端队列栈队列双端队列Java 中的栈、队列和双端队列 单调栈和单调队列二叉堆和优先队列二叉堆优先队列 目录 栈、队列和双端队列 栈和队列是常见的数据结构。栈的特点是后进先出&#xff0c;添加元素、删除元素和查看元素都在栈顶操作。队列的特点是先进先…

栈和队列详解

文章目录 前言一、栈&#xff1a;1.栈的基本概念&#xff1a;2.如何实现栈&#xff1f;3.栈代码演示&#xff1a; 二、队列&#xff1a;1.队列的基本概念&#xff1a;2.如何实现队列&#xff1f;3.队列代码演示&#xff1a; 总结 前言 栈和队列也属于线性表&#xff0c;但是它…

【数据结构】栈和队列详细分析(全)

目录 1.前言2.栈的定义与特点2.1顺序栈的定义2.2顺序栈的操作2.3链栈的定义2.4链栈的操作 3.队列的定义与特点3.1循环队列3.2循环队列的操作3.3链队的定义3.4链队的操作 4.总结 1.前言 栈和队列是两种重要的线性结构。从数据结构角度看&#xff0c;栈和队列也是线性表&#xf…

【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

灵魂拷问&#xff1a;为什么要学数据结构&#xff1f; 数据结构&#xff0c;直白地理解&#xff0c;就是研究数据的存储方式。数据存储只有一个目的&#xff0c;即为了方便后期对数据的再利用。因此&#xff0c;数据在计算机存储空间的存放&#xff0c;决不是胡乱的&#xff0c…

数据结构——栈与队列

目录 一、栈 1.栈的定义 2.栈的分类与基本操作 1. 顺序栈 2.链栈 3.栈与递归的实现 1.递归的简单描述 2.递归过程及与栈的关联 3.递归过程示意图 二.队列 1.队列的定义 2.队列的分类与基本操作 1.顺序队列 2.链队列 3.循环队列 1.假溢出 2.循环队列 3.循环队列相…

栈与队列详解

目录 申明1. 栈的定义1.1 栈的定义1.2 进栈出栈变化形式 2. 栈的抽象数据类型3. 栈的顺序存储结构及实现3.1 栈的顺序存储结构3.2 栈的顺序存储结构——进栈操作3.3 栈的顺序存储结构——出栈操作 4. 两栈共享空间5. 栈的链式存储结构及实现5.1 栈的链式存储结构5.2 栈的链式存…

栈与队列(超详细)

目录 一、栈&#xff08;Stack&#xff09;1、什么是栈&#xff1f;2、栈的常见方法3、自己实现一个栈&#xff08;底层用一个数组实现&#xff09; 二、队列&#xff08;Queue&#xff09;1、什么是队列&#xff1f;2、队列的常见方法3、队列的实现&#xff08;单链表实现&…

C语言---栈和队列

严格来说,栈和队列都属于线性表 "一对一" 栈:"先进后出" 队列: "先进先出" 栈 栈只能从一端存取,另一端是封闭的 在栈中,不论是存还是取,都必须遵循"先进后出"的原则 >栈是一种只能从表的一端存取数据,且遵循"先进后出…