Android使用活动栏 —— 添加ActionBar项目-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

Android使用活动栏 —— 添加ActionBar项目

简介:
+关注继续查看

http://blog.csdn.net/crazy123456789/article/details/7495622

除了在ActionBar的左侧显示应用图标和Activity的标题,也可以在ActionBar上面显示额外的项目。这些被添加的项目被叫做“action items”。这些项目就是一些在你应用中一些功能的快捷方式。举个例子,你正在开发一块RSS阅读器,那么action items就可能是“刷新”、“删除”和“添加”。

下面的例子演示如何在ActionBar中添加项目。

1、使用上一节的项目,在MyActionBarActivity.java中的代码。

[java] view plaincopy
  1. public class MyActionBarActivityextends Activity { 
  2.     /** Called when the activity is first created. */ 
  3.     @Override 
  4.     public void onCreate(Bundle savedInstanceState) { 
  5.         super.onCreate(savedInstanceState); 
  6.         setContentView(R.layout.main); 
  7.          
  8.         //ActionBar actionBar = getActionBar(); 
  9.         //actionBar.hide(); 
  10.         //actionBar.show(); //---show it again--- 
  11.     } 
  12.      
  13.     @Override 
  14.     public boolean onCreateOptionsMenu(Menu menu) {      
  15.         super.onCreateOptionsMenu(menu); 
  16.         CreateMenu(menu); 
  17.         return true
  18.     } 
  19.   
  20.     @Override 
  21.     public boolean onOptionsItemSelected(MenuItem item) 
  22.     {     
  23.          return MenuChoice(item);     
  24.     }     
  25.      
  26.     private void CreateMenu(Menu menu) 
  27.     { 
  28.         MenuItem mnu1 = menu.add(000"Item 1"); 
  29.         {          
  30.             mnu1.setIcon(R.drawable.ic_launcher); 
  31.             mnu1.setShowAsAction( 
  32.                 MenuItem.SHOW_AS_ACTION_IF_ROOM);             
  33.         } 
  34.         MenuItem mnu2 = menu.add(011"Item 2"); 
  35.         {          
  36.             mnu2.setIcon(R.drawable.ic_launcher);             
  37.             mnu2.setShowAsAction( 
  38.                 MenuItem.SHOW_AS_ACTION_IF_ROOM); 
  39.         } 
  40.         MenuItem mnu3 = menu.add(022"Item 3"); 
  41.         {          
  42.             mnu3.setIcon(R.drawable.ic_launcher); 
  43.             mnu3.setShowAsAction( 
  44.                 MenuItem.SHOW_AS_ACTION_IF_ROOM); 
  45.         } 
  46.         MenuItem mnu4 = menu.add(033"Item 4"); 
  47.         {             
  48.             mnu4.setShowAsAction( 
  49.                 MenuItem.SHOW_AS_ACTION_IF_ROOM | 
  50.                 MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
  51.         } 
  52.         MenuItem mnu5 = menu.add(044"Item 5"); 
  53.         {             
  54.             mnu5.setShowAsAction( 
  55.                 MenuItem.SHOW_AS_ACTION_IF_ROOM); 
  56.         } 
  57.     } 
  58.   
  59.     private boolean MenuChoice(MenuItem item) 
  60.     {         
  61.         switch (item.getItemId()) { 
  62.          
  63.         case 0
  64.             Toast.makeText(this"You clicked on Item 1",  
  65.                 Toast.LENGTH_LONG).show(); 
  66.             return true
  67.         case 1
  68.             Toast.makeText(this"You clicked on Item 2",  
  69.                 Toast.LENGTH_LONG).show(); 
  70.             return true
  71.         case 2
  72.             Toast.makeText(this"You clicked on Item 3",  
  73.                 Toast.LENGTH_LONG).show(); 
  74.             return true
  75.         case 3
  76.             Toast.makeText(this"You clicked on Item 4",  
  77.                 Toast.LENGTH_LONG).show(); 
  78.             return true
  79.         case 4
  80.             Toast.makeText(this"You clicked on Item 5",  
  81.                 Toast.LENGTH_LONG).show(); 
  82.             return true;         
  83.         } 
  84.         return false
  85.     }     
  86.  
[java] view plaincopy
  1. public class MyActionBarActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.           
  8.         //ActionBar actionBar = getActionBar();  
  9.         //actionBar.hide();  
  10.         //actionBar.show(); //---show it again---  
  11.     }  
  12.       
  13.     @Override  
  14.     public boolean onCreateOptionsMenu(Menu menu) {       
  15.         super.onCreateOptionsMenu(menu);  
  16.         CreateMenu(menu);  
  17.         return true;  
  18.     }  
  19.    
  20.     @Override  
  21.     public boolean onOptionsItemSelected(MenuItem item)  
  22.     {      
  23.          return MenuChoice(item);      
  24.     }      
  25.       
  26.     private void CreateMenu(Menu menu)  
  27.     {  
  28.         MenuItem mnu1 = menu.add(000"Item 1");  
  29.         {           
  30.             mnu1.setIcon(R.drawable.ic_launcher);  
  31.             mnu1.setShowAsAction(  
  32.                 MenuItem.SHOW_AS_ACTION_IF_ROOM);              
  33.         }  
  34.         MenuItem mnu2 = menu.add(011"Item 2");  
  35.         {           
  36.             mnu2.setIcon(R.drawable.ic_launcher);              
  37.             mnu2.setShowAsAction(  
  38.                 MenuItem.SHOW_AS_ACTION_IF_ROOM);  
  39.         }  
  40.         MenuItem mnu3 = menu.add(022"Item 3");  
  41.         {           
  42.             mnu3.setIcon(R.drawable.ic_launcher);  
  43.             mnu3.setShowAsAction(  
  44.                 MenuItem.SHOW_AS_ACTION_IF_ROOM);  
  45.         }  
  46.         MenuItem mnu4 = menu.add(033"Item 4");  
  47.         {              
  48.             mnu4.setShowAsAction(  
  49.                 MenuItem.SHOW_AS_ACTION_IF_ROOM |  
  50.                 MenuItem.SHOW_AS_ACTION_WITH_TEXT);  
  51.         }  
  52.         MenuItem mnu5 = menu.add(044"Item 5");  
  53.         {              
  54.             mnu5.setShowAsAction(  
  55.                 MenuItem.SHOW_AS_ACTION_IF_ROOM);  
  56.         }  
  57.     }  
  58.    
  59.     private boolean MenuChoice(MenuItem item)  
  60.     {          
  61.         switch (item.getItemId()) {  
  62.           
  63.         case 0:  
  64.             Toast.makeText(this"You clicked on Item 1",   
  65.                 Toast.LENGTH_LONG).show();  
  66.             return true;  
  67.         case 1:  
  68.             Toast.makeText(this"You clicked on Item 2",   
  69.                 Toast.LENGTH_LONG).show();  
  70.             return true;  
  71.         case 2:  
  72.             Toast.makeText(this"You clicked on Item 3",   
  73.                 Toast.LENGTH_LONG).show();  
  74.             return true;  
  75.         case 3:  
  76.             Toast.makeText(this"You clicked on Item 4",   
  77.                 Toast.LENGTH_LONG).show();  
  78.             return true;  
  79.         case 4:  
  80.             Toast.makeText(this"You clicked on Item 5",   
  81.                 Toast.LENGTH_LONG).show();  
  82.             return true;          
  83.         }  
  84.         return false;  
  85.     }      
  86.   
  87. }  
2、按F11调试。观察ActionBar右侧的图标。

如果按菜单按钮,就会看见余下的菜单选项。“悬浮的”菜单。

3、点击菜单项,就会弹出提示。

4、按Ctrl+F11,改变模拟器的显示方向。将会看到四个选项:三个按钮和一个文本框。


http://blog.csdn.net/crazy123456789/article/details/7495590

除了fragments(碎片),在Android3和4中新增加的特性,还有ActionBar(活动栏)。ActionBar位于传统标题栏的位置,就在设备屏幕的顶部。ActionBar显示了应用的图标和Activity的标题。可选择地,ActionBar的右侧是那些action items(活动项目)。下图展示了build-in(内置的)Email应用,显示了应用的图标,Activity(活动)的标题,以及一些活动项目。下一节将详细地讨论action items(活动项目)。

下面的例子,将会介绍如何通过编写代码去隐藏和显示ActionBar。

1、创建一个工程,MyActionBar。

2、按F11在模拟器上面调试。此时,你就会看见ActionBar被放置在了屏幕的顶端(包含应用的图标和应用的名称“MyActionBar”)。如下图。

3、想要隐藏ActionBar,可以在AndroidManifest.xml中加入以下代码。

[html] view plaincopy
  1. <?xmlversion="1.0"encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     package="net.learn2develop.MyActionBar" 
  4.     android:versionCode="1" 
  5.     android:versionName="1.0"> 
  6.  
  7.     <uses-sdkandroid:minSdkVersion="13"/> 
  8.  
  9.     <application 
  10.         android:icon="@drawable/ic_launcher" 
  11.         android:label="@string/app_name"> 
  12.         <activity 
  13.             android:label="@string/app_name" 
  14.             android:name=".MyActionBarActivity" 
  15.             <!-- 注意这行代码 --> 
  16.             android:theme="@android:style/Theme.Holo.NoActionBar"> 
  17.             <intent-filter> 
  18.                 <actionandroid:name="android.intent.action.MAIN"/> 
  19.  
  20.                 <categoryandroid:name="android.intent.category.LAUNCHER"/> 
  21.             </intent-filter> 
  22.         </activity> 
  23.     </application> 
  24.  
  25. </manifest> 
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="net.learn2develop.MyActionBar"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk android:minSdkVersion="13" />  
  8.   
  9.     <application  
  10.         android:icon="@drawable/ic_launcher"  
  11.         android:label="@string/app_name" >  
  12.         <activity  
  13.             android:label="@string/app_name"  
  14.             android:name=".MyActionBarActivity"  
  15.             <!-- 注意这行代码 -->  
  16.             android:theme="@android:style/Theme.Holo.NoActionBar">  
  17.             <intent-filter >  
  18.                 <action android:name="android.intent.action.MAIN" />  
  19.   
  20.                 <category android:name="android.intent.category.LAUNCHER" />  
  21.             </intent-filter>  
  22.         </activity>  
  23.     </application>  
  24.   
  25. </manifest>  
4、按F11重新调试,就会看见,这次ActionBar就不会显示了。

5、也可以通过编写代码的方式去移除ActionBar,但这要使用ActionBar类。如果想这么做的话,首先就得把AndroidManifest.xml中的android:theme属性去掉,否则,将会引起一个Exception(异常)。

6、在MyActionBar.java文件中加入如下代码。

[java] view plaincopy
  1. public class MyActionBarActivityextends Activity { 
  2.     /** Called when the activity is first created. */ 
  3.     @Override 
  4.     public void onCreate(Bundle savedInstanceState) { 
  5.         super.onCreate(savedInstanceState); 
  6.         setContentView(R.layout.main); 
  7.         // 获取ActionBar实例 
  8.         ActionBar actionBar = getActionBar(); 
  9.         // 隐藏 
  10.         actionBar.hide(); 
  11.         // 显示 
  12.         //actionBar.show(); 
  13.     } 
  14.      
[java] view plaincopy
  1. public class MyActionBarActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         // 获取ActionBar实例  
  8.         ActionBar actionBar = getActionBar();  
  9.         // 隐藏  
  10.         actionBar.hide();  
  11.         // 显示  
  12.         //actionBar.show();  
  13.     }  
  14.       
  15. }  
7、按F11重新调试,发现ActionBa依然是隐藏的,但是此时AndroidManifest.xml中的android:theme属性已经被删除了。

注意:

如果在AndroidManifest.xml中定义了主题,把ActionBar给隐藏了。在程序运行时,如果执行getActionBar()方法,就会返回一个null。所以,一般情况下,总是通过编写代码的方式去控制ActionBar的显示和隐藏。


http://blog.csdn.net/crazy123456789/article/details/7495639

菜单选项是没有文字的。如果想要同时显示图标和文字,可以一起使用“|”和MenuItem.SHOW_AS_ACTION_WITH_TEXT常量。

[java] view plaincopy
  1. MenuItem mnu1 = menu.add(0,00,"Item 1"); 
  2. {          
  3.     mnu1.setIcon(R.drawable.ic_launcher); 
  4.     mnu1.setShowAsAction( 
  5.         MenuItem.SHOW_AS_ACTION_IF_ROOM | 
  6.         MenuItem.SHOW_AS_ACTION_WITH_TEXT);             
[java] view plaincopy
  1. MenuItem mnu1 = menu.add(000"Item 1");  
  2. {           
  3.     mnu1.setIcon(R.drawable.ic_launcher);  
  4.     mnu1.setShowAsAction(  
  5.         MenuItem.SHOW_AS_ACTION_IF_ROOM |  
  6.         MenuItem.SHOW_AS_ACTION_WITH_TEXT);              
  7. }  


除了可以点击Action项目,也可以点击ActionBar上面的应用图标。当应用图标被点击的时候,会调用onOptionsItemSelected()方法。如果想识别应用图标被点击了,可以使用adnroid.R.id.home常量。

[java] view plaincopy
  1. private boolean MenuChoice(MenuItem item) 
  2.     {         
  3.         switch (item.getItemId()) { 
  4.         case  android.R.id.home: 
  5.             Toast.makeText(this,  
  6.                 "You clicked on the Application icon",  
  7.                 Toast.LENGTH_LONG).show(); 
  8.             return true
  9.         case 0
  10.             Toast.makeText(this"You clicked on Item 1",  
  11.                 Toast.LENGTH_LONG).show(); 
  12.             return true
  13.         case 1
  14.            ...... 
  15.     }     
[java] view plaincopy
  1. private boolean MenuChoice(MenuItem item)  
  2.     {          
  3.         switch (item.getItemId()) {  
  4.         case  android.R.id.home:  
  5.             Toast.makeText(this,   
  6.                 "You clicked on the Application icon",   
  7.                 Toast.LENGTH_LONG).show();  
  8.             return true;  
  9.         case 0:  
  10.             Toast.makeText(this"You clicked on Item 1",   
  11.                 Toast.LENGTH_LONG).show();  
  12.             return true;  
  13.         case 1:  
  14.            ......  
  15.     }      
如果想让应用图标能被点击,我们需要调用setDisplayHomeAsUpEnable()方法:

[java] view plaincopy
  1. /** Called when the activity is first created. */ 
  2. @Override 
  3. public void onCreate(Bundle savedInstanceState) { 
  4.     super.onCreate(savedInstanceState); 
  5.     setContentView(R.layout.main); 
  6.      
  7.     ActionBar actionBar = getActionBar(); 
  8.     actionBar.setDisplayHomeAsUpEnabled(true); 
  9.     //actionBar.hide(); 
  10.     //actionBar.show(); //---show it again--- 
[java] view plaincopy
  1. /** Called when the activity is first created. */  
  2. @Override  
  3. public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     setContentView(R.layout.main);  
  6.       
  7.     ActionBar actionBar = getActionBar();  
  8.     actionBar.setDisplayHomeAsUpEnabled(true);  
  9.     //actionBar.hide();  
  10.     //actionBar.show(); //---show it again---  
  11. }  
当点击应用图标:


一般情况下,一个应用可能包含很多activity,那么应用的图标通常被用来返回主Activity。如果想这么做,就需要一个Intent对象,并使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志。

[java] view plaincopy
  1. case  android.R.id.home: 
  2.     Toast.makeText(this,  
  3.         "You clicked on the Application icon",  
  4.         Toast.LENGTH_LONG).show(); 
  5.  
  6.     Intent i = new Intent(this, MyActionBarActivity.class); 
  7.     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
  8.     startActivity(i); 
  9.  
  10.     return true
[java] view plaincopy
  1. case  android.R.id.home:  
  2.     Toast.makeText(this,   
  3.         "You clicked on the Application icon",   
  4.         Toast.LENGTH_LONG).show();  
  5.   
  6.     Intent i = new Intent(this, MyActionBarActivity.class);  
  7.     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  8.     startActivity(i);  
  9.   
  10.     return true;  
使用Intent.FLAG_ACTIVITY_CLEAR_TOP标识,可以确保当点击应用图标的时候,在“返回栈”里面的那些activity都会被清除掉。使用这种方法,如果用户点击返回键,其他的activity将不会再显示出来。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【mockito】单元测试之mockito简单使用
项目使用的是springmvc+mybatis 开发; mock包为 mockito-all;虽然也引用了powermock,但截至目前,还未使用到;如果使用到后续再补相关笔记。
15 0
Caffeine缓存 最快缓存 内存缓存
Caffeine是一个进程内部缓存框架 最快缓存 内存缓存
17 0
android11开启无线调试
目录 配对步骤 步骤一:在手机上启用**开发者模式 & USB 调试** 步骤二: 手机开启开发者选项,打开无线调试 步骤三:点击无线调试,使用配对码配对设备 电脑上的操作:电脑打开cmd命令行 步骤一:检查adb版本 步骤二:按图输入下一个命令 步骤三
5 0
Flutter基础笔记
目录 List里面常用的属性和方法: Set Map forEach,map, where,any,every extends抽象类 和 implements Flutter环境搭建 入口文件、入口方法 第一个 Demo Center 组件的 使用 把内容单独抽离成一个组件 给 Text 组件增加一些装饰 用MaterialApp 和 Scaffold两个组件装饰 App Text 组件 Container 组件 图片组件 引入本地图片 裁剪布局之 ClipRect、ClipRRect、ClipOval、ClipPath、CustomClipper 实现圆角以及实现圆形图片 圆形头像
4 0
高智商学生如何玩转无影云电脑
作为一名刚学习编程技术的学生来说,非常有幸体验阿里的无影云电脑,非常的荣幸,也感谢阿里云的支持与帮助,本人将写一遍无影云电脑评测的文章来记录一下这一令人感动的瞬间。
34 0
学习报告 冬季实战营第一期:从零到一上手玩转云服务器
冬季实战营第一期:从零到一上手玩转云服务器-本期学习报告
18 0
云起实验室学习报告之LAMP搭建
云起实验室学习报告之LAMP搭建
17 0
flutter分平台主题定制
有时候,为了满足不同平台的用户需求,我们希望针对特定的平台设置不同的样式。比如,在 iOS 平台上设置浅色主题,在 Android 平台上设置深色主题。面对这样的需求,我们可以根据 defaultTargetPlatform 来判断当前应用所运行的平台,从而根据系统类型来设置对应的主题。
8 0
flutter开发之必须掌握的dart知识点:list,set,map
要说,List在我的开发使用中,确实是最为频繁的了,那么如何使用list,也就成了一个问题,list提供的方法又有哪些 这些都是需要掌握理解的。 首先第一个, 对于固定长度的list,如何删除添加元素呢
10 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载