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

简介:

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

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

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

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

[java]  view plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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将不会再显示出来。
相关文章
|
4月前
|
Web App开发 移动开发 小程序
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,显示“网络不给力,请稍后再试”,预发内网版本不能使用,线上版本可以正常使用,这个是什么原因啊,是某些参数没有配置吗,还是说是一些参数改错了?
57 2
|
4月前
|
XML Java Android开发
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
47 0
|
1天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
2 0
|
4月前
|
XML 前端开发 Java
Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
48 0
|
2月前
|
Java Android开发 C++
安卓SO层开发 -- 第一个NDK项目
安卓SO层开发 -- 第一个NDK项目
16 0
|
3月前
|
IDE 开发工具 Android开发
Android Studio 下发布项目成APK文件
Android Studio 下发布项目成APK文件
117 1
|
3月前
|
JavaScript Android开发
Cordova 打包 Vue 项目到Android打开白屏
Cordova 打包 Vue 项目到Android打开白屏
|
4月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
150 0
|
4月前
|
Web App开发 JSON Android开发
【Android App】实战项目之仿微信的视频通话(附源码和演示 超详细必看)
【Android App】实战项目之仿微信的视频通话(附源码和演示 超详细必看)
82 0
|
4月前
|
传感器 人工智能 自动驾驶
【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)
【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)
95 0