Android之ActionBar学习

article/2025/11/7 9:22:41

            写于开始前,首先这篇是翻译,源自于自己关于ActionBar的一个问题求教于manoel兄,其csdn博客地址(http://blog.csdn.net/manoel?viewmode=contents)。后来他发送我一份资料,感觉不错,翻译一下。


         关于那个问题:是关于如何生成如下图所示之ActionBar效果:

                

        其实就在官网上就有答案,自己疏忽再加上资料繁多。寻了许久,经过指点。终于找到:

To enable split action bar, simply add uiOptions="splitActionBarWhenNarrow" to your <activity> or <application> manifest element.(http://developer.android.com/guide/topics/ui/actionbar.html)Using split action bar 标题下。

如果你想拥有上图的那种效果,Fragment(关于Fragment的内容,见上篇)在menuItem的下面显示,在manifest.xml文件里在<activity>或者<application>里加上uiOptions="splitActionBarWhenNarrow" 即可。

         注:本人在4.0版本平板上不能达到此效果,在4.0手机上可以实现。在平板上,效果类似如下:

        

如果fragment增多,不会分裂出现上图效果,而使用下拉列表来显示Fragment。


       下面开始正题。

简介

  1.         ActionBar是一个显示在屏幕顶部的控件,它包括了在左边显示的应用的logo图标和右边操作菜单的可见项。
  2.        我们可以选择可见的操作菜单可见项,不可见项会以下拉列表的形式呈现出来。(见上图相机图标右侧,点击出现下拉列 表,显示没有直接显示出来的操作菜单可见项)
  3.        ActionBar为Fragment之间提供标签导航


添加ActionBar

  1.      不需要导入ActionBar,因为在android3.0或者以上版本中,ActionBar已经默认的包含在Activity中
  2.      在Android3.0的默认主题“holographic”中,已经创造了ActionBar
  3.      当android:minSdkVersion 或者 android:targetSdkVersion 属性被设置成11或者更高时,应用会被认为是Android3.0版本(默认含有ActionBar)

去除ActionBar  

  1.      我们可以通过把主题设置为Theme.Holo.NoActionBar为一个Activity去除掉ActionBar。                                                                                        <activity android:theme="@android:style/Theme.Holo.NoActionBar">
  2.      我们也可以通过在代码中调用show()或者hide()方法来相应的显示或者隐藏ActionBar

添加Action Item

               每一个操作菜单的菜单项都可以成为ActionBar中的一个Action Item
       参考代码如下:

      ActionBarDemoActivity.java:

public class ActionBarDemoActivity extends Activity
{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button showBt = (Button) findViewById(R.id.showBt);showBt.setOnClickListener(new OnClickListener(){public void onClick(View view){ActionBar actionBar = getActionBar();actionBar.show();}});}public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu);MenuItem add = menu.add(0, 1, 0, "Save");MenuItem open = menu.add(0, 2, 1, "Open");MenuItem close = menu.add(0, 3, 2, "Close");add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);open.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);close.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);return true;}
}


        main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><Buttonandroid:id="@+id/hideBt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hide The Action Bar" ></Button><Buttonandroid:id="@+id/showBt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Show The Action Bar" ></Button></LinearLayout>

      效果图如下:


 

添加活动项(Action Item)

        当使用xml文件创建菜单(menu)时,可以标记这些菜单项作为想要实现的Action Item
代码如下:
ActionBarXMLActivity:
      
public class ActionBarXMLActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu){MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.optionsmenu, menu);return true;}
}

   

optionsmenu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/item1"android:orderInCategory="1"android:showAsAction="ifRoom|withText"android:title="@string/save"/><itemandroid:id="@+id/item1"android:orderInCategory="2"android:showAsAction="ifRoom|withText"android:title="@string/edit"/><itemandroid:id="@+id/item1"android:orderInCategory="3"android:showAsAction="ifRoom|withText"android:title="@string/about"/><itemandroid:id="@+id/item1"android:orderInCategory="4"android:showAsAction="ifRoom|withText"android:title="@string/help"/></menu>


效果图:



菜单项过多溢出

       当创建一个ActionBar拥有太多的Action item以至于没有足够的控件来显示会在屏幕的右上角出现一个溢出菜单项,可以通过它来访问溢出部分菜单。
       代码示例:
       其Activity代码如上(ActionBarXMLActivity
       溢出菜单xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/item1"android:orderInCategory="1"android:showAsAction="ifRoom|withText"android:title="@string/save"/><itemandroid:id="@+id/item2"android:orderInCategory="2"android:showAsAction="ifRoom|withText"android:title="@string/edit"/><itemandroid:id="@+id/item3"android:orderInCategory="3"android:showAsAction="ifRoom|withText"android:title="@string/about"/><itemandroid:id="@+id/item4"android:orderInCategory="4"android:showAsAction="ifRoom|withText"android:title="@string/help"/><itemandroid:id="@+id/item5"android:orderInCategory="5"android:showAsAction="ifRoom|withText"android:title="@string/file"/><itemandroid:id="@+id/item6"android:orderInCategory="6"android:showAsAction="ifRoom|withText"android:title="@string/run"/><itemandroid:id="@+id/item7"android:orderInCategory="7"android:showAsAction="ifRoom|withText"android:title="@string/source"/><itemandroid:id="@+id/item8"android:orderInCategory="8"android:showAsAction="ifRoom|withText"android:title="@string/navigate"/><itemandroid:id="@+id/item9"android:orderInCategory="9"android:showAsAction="ifRoom|withText"android:title="@string/search"/><itemandroid:id="@+id/item10"android:orderInCategory="10"android:showAsAction="ifRoom|withText"android:title="@string/project"/><itemandroid:id="@+id/item11"android:orderInCategory="11"android:showAsAction="ifRoom|withText"android:title="@string/refactor"/><itemandroid:id="@+id/item12"android:orderInCategory="12"android:showAsAction="ifRoom|withText"android:title="@string/window"/><itemandroid:id="@+id/item13"android:orderInCategory="13"android:showAsAction="ifRoom|withText"android:title="@string/help"/></menu>

其效果图如下:



使用带字的Action Item

  1.         Action item 默认格式是如果菜单项含字和图标的话,只显示图标
  2.         如果想要显示字的效果,在xml里如下设置:android:showAsAction="ifRoom|withText" 
  3.         或者在代码里调用setShowAsAction():setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)

Action事件

  1.         ActionBar中一个菜单项(即Action item)的触发像以前版本中的活动菜单回调方法(onOptionsItemSelected())一样。
  2.         当用户选择一个Fragment的菜单项时,首先会调用Activity的onOptionsItemSelected()方法,如果该方法返回false,则调用Fragment实现的onOptionsItemSelected()方法。

应用图标

  1.      默认情况下,应用图标在ActionBar的左侧
  2.     当用户点击应用bar的时候,系统会调用你的Activity里面的onOptionsItemSelected() 方法里面的Android.R.id.Home ID(你的主ID)里定义的事件。我们可以重写这个方法,添加一个条件执行该行为:让它跳转到这个应用的主Activity而不是返回的主屏幕。
  3.     如果选择返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。
  4.     使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在,所有在其上的activity都会被销毁,然后主activity会到栈顶,而不用创建主Activity的的新实例。

@Overridepublic boolean onOptionsItemSelected(MenuItem 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 图标后返回前一个activity,可以通过在Actionbar设置setDisplayHomeAsUpEnabled(true) 来实现。
public class HomyUpActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}@Overrideprotected void onStart() {super.onStart();ActionBar actionBar = this.getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.optionsmenu, menu);return true;}}

效果图:




添加活动视图

  1.         我们也可以添加一个视图作为一个Action Item.我们可以通过在xml元素的android:actionLayout属性制定我们希望现实布局资源的ID(例如@layout/mysearchview)
  2.         我们可以选择添加android:actionViewClass属性分配与完全限定的类名描述我们想要显示的视图(例如android.widget.SearchView)
代码示例:
optionsmenu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/item4"android:orderInCategory="4"android:showAsAction="ifRoom|withText"android:title="@string/help"/><itemandroid:id="@+id/item5"android:orderInCategory="5"android:showAsAction="ifRoom|withText"android:title="@string/file"/><itemandroid:id="@+id/search"android:actionViewClass="android.widget.SearchView"android:showAsAction="ifRoom"android:title="Search"/></menu>

HomeUpActivity.java
public class HomyUpActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}@Overrideprotected void onStart() {super.onStart();ActionBar actionBar = this.getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu){MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.optionsmenu, menu);return true;}
}

效果图:


ActionBar 标签

  1.         ActionBar可以现实选项卡供用户切换浏览该Activity中不同的Fragment
  2.         每个标签都可以是一个图标或文本标题

代码示例:
       TabsActivity.java
public class TabsActivity extends Activity
{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);ActionBar bar = getActionBar();bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);ActionBar.Tab tabA = bar.newTab().setText("A Tab");ActionBar.Tab tabB = bar.newTab().setText("B Tab");ActionBar.Tab tabC = bar.newTab().setText("C Tab");Fragment fragmentA = new AFragmentTab();Fragment fragmentB = new BFragmentTab();Fragment fragmentC = new CFragmentTab();}tabA.setTabListener(new MyTabsListener(fragmentA));tabB.setTabListener(new MyTabsListener(fragmentB));tabC.setTabListener(new MyTabsListener(fragmentC));bar.addTab(tabA);bar.addTab(tabB);bar.addTab(tabC);protected class MyTabsListener implements ActionBar.TabListener{private Fragment fragment;public MyTabsListener(Fragment fragment){this.fragment = fragment;}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft){ft.add(R.id.fragment_place, fragment, null);}}}

AFragmentTab.java
public class AFragmentTab extends Fragment
{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){return inflater.inflate(R.layout.fragment_a, container, false);}
}

BFragmentTab.java
public class BFragmentTab extends Fragment
{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){return inflater.inflate(R.layout.fragment_b, container, false);}
}

CFragmentTab.java
public class CFragmentTab extends Fragment
{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){return inflater.inflate(R.layout.fragment_c, container, false);}
}

main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/fragment_place"android:layout_width="match_parent"android:layout_height="wrap_content" ></LinearLayout></LinearLayout>

效果图:


PPT 下载地址:http://download.csdn.net/detail/aomandeshangxiao/4383006



http://chatgpt.dhexx.cn/article/9vry1nOs.shtml

相关文章

ActionBar应用开发讲解

1. 什么是操作栏(ActionBar是android3.0及之后的版本添加的新特性)&#xff1a; 1) ActionBar是一个显示在屏幕顶部的控件&#xff0c;它包括了在左边显示的应用的logo图标和右边操作菜单的可见项。 2) 我们可以选择可见的操作菜单可见项&#xff0c;不可见项会以下拉列表的…

超详细!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;栈区…