ActionBar

article/2025/11/7 10:00:06

ActionBar是3.0之后出现的控件,取代menu,显示在标题栏位置。根据我的经验,menu尽量不要使用,很多用户都是小白,根本就不知道menu这个按键有什么用,也不会去点击这个按键。

通过getActionBar()得到对象。

1.普通ActionBar

创建方式与Menu(xml创建)一样,不过item中需要设定android:showAsAction属性,不设定就是默认never,item将为menu的item,选择always或者ifRoom将为ActionBar。

右上角为ActionBar增加的item。默认不显示title,只有在showAsAction属性中设置了withText属性才会在横屏时显示。

2.Tab 类型ActionBar

   通过getActionBar()得到ActionBar,接着actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS),再        actionBar.addTab(actionBar.newTab().setText("qqq").setIcon(R.drawable.ic_launcher).setTabListener(this));增加一条Tab。


   通过 

       actionBar.setDisplayShowHomeEnabled(false);actionBar.setDisplayShowTitleEnabled(false);

可以去掉标题栏部分:

等价于

actionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_TITLE );

如果只actionBar.setDisplayShowHomeEnabled(false);标题栏部分的图片将去掉,文字保留,与下面的QQQTabs换位,显示在Tabs与View之间。


3.显示在底部的ActionBar

    在AndroidManifest里的Activity加上属性android:uiOptions="splitActionBarWhenNarrow"后,普通ActionBar将不再显示在标题栏部分,而是显示在屏幕底部:


4.对比4.0手机的联系人布局


  基本结构一样的。联系人布局是ActionBar+fragment+ViewPager组成的。3个界面间可互相滑动利用了ViewPager,ViewPager的每个界面内容是fragment。


附加一段4.0联系人添加联系人时title部分代码:

View customActionBarView = inflater.inflate(R.layout.editor_custom_action_bar,null);View saveMenuItem = customActionBarView.findViewById(R.id.save_menu_item);saveMenuItem.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mFragment.onDoneClicked();}});// Show the custom action bar but hide the home icon and titleactionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME |ActionBar.DISPLAY_SHOW_TITLE);actionBar.setCustomView(customActionBarView);




actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP|ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_CUSTOM);


actionBar.setDisplayHomeAsUpEnabled(true)    // 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP

actionBar.setDisplayShowHomeEnabled(true)   //使左上角图标可点击,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME

actionBar.setDisplayShowCustomEnabled(true)  // 使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM

actionBar.setDisplayShowTitleEnabled(true)   //对应ActionBar.DISPLAY_SHOW_TITLE


actionBar.hide()   //  影藏标题栏

actionBar.show()  // 显示标题栏

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/menu1"android:actionLayout="@layout/list_item"android:actionViewClass="android.widget.SearchView"android:icon="@drawable/ic_launcher"android:showAsAction="ifRoom|collapseActionView"android:title="@string/app_name"/><itemandroid:id="@+id/select"android:showAsAction="ifRoom"android:title="@string/select_all"></item><itemandroid:id="@+id/delete"android:enabled="false"android:showAsAction="ifRoom|withText"android:title="@string/delete"></item>
</menu>

如上:

加上android:actionViewClass="android.widget.SearchView"属性后,此条MenuItem图片显示为搜索图片,点击后出现搜索框,点搜索框右边的X退出搜索模式,如果在android:showAsAction属性中加上collapseActionView属性,那么MenuItem图片为自定义的图片,并且靠点击左上角图片退出搜索模式。

android:actionLayout="@layout/list_item"属性与android:actionViewClass不能共存,有android:actionViewClass则android:actionLayout属性不起作用。



4.下拉List的ActionBar,点击后下拉出一列View来,类似ListPopWindow。

只需在onCreate方法中加上

		ActionBar actionBar = getActionBar();actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);actionBar.setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationListener);
上面第三行第一个参数是SpinnerAdapter的对象,第二个参数是ActionBar.OnNavigationListener的对象。

设置后ActionBar栏会自动多出一个item来,默认是从左往右排布,也就是说如果Home ActioBar与Title都隐藏,那么其将会在最左边。


ActionMode: 与ActionView类似,显示在标题栏位置,3.0以前用ContextMenu,之后推荐用这个。


上图就是ActionMode显示时的样子,hh本来小写的,变成大写了。

最左边的与最右边的那两个图标是系统的,左边为影藏,右边为列出没显示在title部位的item。

这个控件比较容易使用,通过Activity的startActionMode(CallBack)方法,显示这个控件,这个控件的定义都在CallBack这个接口里,这个接口需要实现onCreateActionMode、onPrepareActionMode、onActionItemClicked、onDestroyActionMode。一般在onCreateActionMode方法里创建上边需要显示Item。比如:

	@Overridepublic boolean onCreateActionMode(ActionMode mode, Menu menu) {MenuInflater inflater = mode.getMenuInflater();inflater.inflate(R.menu.main, menu);return true;}
与创建Menu没什么区别。在onActionItemClicked方法里响应完点击后mode.finish()来影藏这个ActionMode。定义在XML中的Item如果android:showAsAction为never那么这些Item会在右上边的那个图标被点击后显示。

若使用ListView或GridView之类继承自AbsListView的控件 可以使用setMultiChoiceModeListener方式并实现接口来使用ActionMode,比如要多项删除,当长按某一项时,ActionMode会出现,并且被长按的那项会被选中,接着点击其他项,触发onActionItemClicked方法.......


PopMenu : 与ListPopWindow非常相似的显示方式,创建比其简单。


这个控件显示在某个View对象的下面,如果下面空间不足则显示在上面。

PopupMenu pop = new PopupMenu(this, button);
构造时定义显示的位置,如上显示在button下面。
pop.getMenuInflater().inflate(R.menu.main, pop.getMenu());
显示的内容与Menu一样的定义方式。

pop.show();
需要时show。

点击响应通过setOnMenuItemClickListener 方法设置监听。


一些有用的主题属性设置:

1.android:actionBarStyle

顶部标题栏那一带的属性设置,style类型引用。这个属性很重要,如果想要把标题栏去掉换成customView或者Tab类型,你会发现Activity启动时先显示标题栏再执行你代码里的替换功能,那么必须在theme属性中指定不显示标题与logo。

    <style name="actionStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"><item name="android:background">@drawable/title_bg</item><item name="android:backgroundStacked">@drawable/title_bg</item><item name="android:displayOptions"></item></style>
2.android:actionMenuTextAppearance

设置ActionBar上文字的大小、style等。style类型引用。

    <style name="actionText" parent="android:TextAppearance.Holo.Widget.ActionBar.Menu"><item name="android:textSize">20sp</item><item name="android:textStyle">italic</item></style>
3.android:actionMenuTextColor

设置Actionbar上的文字颜色。

4.android:actionButtonStyle

设置ActionBar上每个按钮的style,主要是背景色等(不包括文字)。一个menu item就相当于一个button。

5.android:actionBarSplitStyle

split类型的Actiobar style设置,style类型引用

    <style name="splitStyle" parent="android:Widget.Holo.Light.ActionBar.Solid"><item name="android:backgroundSplit">@drawable/title_bg</item> <!--  整个 split的背景--> <item name="android:minHeight">40sp</item></style>

6.android:windowFullscreen

是否去掉状态栏,标题栏与显示区域都属于content区域。

7.android:windowBackground

设置布局文件显示区域与标题栏显示区域的背景。

8.android:windowActionBar

标题栏部位是否使用actionbar,false则为3.0之前的标题方式。

9.让ActionBar浮在布局显示的上面,腾出空间(在setContentView之前调用):

        requestWindowFeature(Window.FEATURE_ACTION_BAR);requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
上面的第一行代码可以在Activity的Theme中指定 8 属性为true替代,默认的这条属性为true。第2行代码的属性未找到。

以下是一些与ActionBar无关的属性记录:

1.android:windowNoTitle

是否去掉标题栏。

2.android:windowBackground

显示区域的背景,包括了标题栏。

3.android:windowIsTranslucent

设置内容显示前为透明状态

4.android:windowContentOverlay

设置遮盖在显示内容上的内容,引用类型。

5.android:windowIsFloating

设置Activity为dialog类型的Activity

6.android:windowCloseOnTouchOutside

设置是否点击content之外后关闭Activity,Api 11 之后才能使用。 



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

相关文章

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

栈和队列讲解

目录 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…