Android活动条(actionbar)使用详解(一)

活动条(ActionBar)是Android3.0的重要更新之一,ActionBar位于传统标题的位置,其主要提供了如下功能:

>显示选项菜单的菜单项,即激昂菜单项显示在Action Item;

>使用程序图标作为返回Home主屏或向上的导航操作;

>提供交互式View作为Action View;

>提供基于Tab的导航方式,可用于切换多个Fragment

>提供基于下拉的导航方式

1.启用/关闭ActionBar

Android3.0及以上版本已经默认启用了ActionBar,只需要在AndroidManifest.xml文件的SDK配置指定Android版本高于11就会默认启用ActionBar,代码如下:

<uses-sdk

android:minSdkVersion="17"

android:targetSdkVersion="17" />

在实际项目中,通常推荐使用代码来控制ActionBar的显示、隐藏,代码实现如下:

ActionBar actionBar = getActionBar();        //返回ActionBar实例

actionBar.show();                                        //显示

actionBar.hide();                                            //隐藏

当然,只有当应用主题没有关闭ActionBar时才能返回ActionBar实例。如果设置应用主题或Activity的主题属性Android:name="@android:style/Theme.Holo.NoActionBar",则关闭ActionBar活动条功能。

注意:在使用ActionBar过程中,明明我们将Android的SDK版本设置大于3.0,但是仍不能实现在标题栏显示ActionBar或者getActionBar()返回的null。这是由于Android应用的主题的错误,有两种方法:

(1)在新建项目时,设置Android版本高于3.0

(2)删除AndroidManifest.xml清单文件<Application.../>元素中的Android:theme属性,然后在Activity代码中添加getWindow().requestFeature(Window.FEATURE_ACTION_BAR);即可。

2.使用ActionBar显示选项菜单

由于有些手机不存在MENU按键,Android提供了ActionBar将选项菜单显示成Action Item。从Android 3.0开始,MenuItem新增如下方法用于将菜单选项显示在ActionBar上作为ActionItem。ActionBar还可以根据应用程序当前的功能来提供与其相关的Action按钮,这些按钮都会以图标或文字的形式直接显示在ActionBar上。当然,如果按钮过多,ActionBar上显示不完,多出的一些按钮可以隐藏在overflow里面(最右边的三个点就是overflow按钮),点击一下overflow按钮就可以看到全部的Action按钮了。 当Activity启动的时候,系统会调用Activity的onCreateOptionsMenu()方法来取出所有的Action按钮,我们只需要在这个方法中去加载一个menu资源(menu/*.xml),并把所有的Action按钮都定义在资源文件里面就可以了。

setShowAsAction(int actionEnum)

该方法设置是否将该菜单显示在ActionBar上,作为ActionItem。其中,actionEnum方法支持如下参数值:

>SHOW_AS_ACTION_ALWAYS:总是将该MenuItem显示在ActionBar上;

>SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该Action View折叠成普通菜单项

>SHOW_AS_ACTION_IF_ROOM:当ActionBar位置足够时才显示MenuItem

>SHOW_AS_ACTION_NEVER:不将该MenuItem显示在ActionBar上

>SHOW_AS_ACTION_WITH_TEXT:将该MenuItem显示在ActionBar上,并显示菜单项的文本

然后,在实际项目中我们推荐使用XML资源文件来定义菜单,因为,我们可以直接在菜单资源文件中的<item.../>元素指定如下属性即可:

<item android:title="菜单项名称"

android:icon="菜单项标题"

android:showAsAction="always|withText"

//总是将菜单项显示在ActionBar上并显示菜单项的文本

......./>

源码举例:

(1)菜单资源文件/res/menu/menu.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  3. <!-- 第一个菜单项:字体大小菜单,并设置为ActionBar(假如手机无Menu键)-->
  4. <item android:title="@string/font_size"
  5. android:icon="@drawable/font"
  6. android:showAsAction="always|withText">
  7. <menu>
  8. <!-- 定义一组单选菜单项 ,然后定义一组菜单选项-->
  9. <group android:checkableBehavior="single">
  10. <item
  11. android:id="@+id/font_10"
  12. android:title="@string/font_10"/>
  13. <item
  14. android:id="@+id/font_12"
  15. android:title="@string/font_12"/>
  16. <item
  17. android:id="@+id/font_14"
  18. android:title="@string/font_14"/>
  19. <item
  20. android:id="@+id/font_16"
  21. android:title="@string/font_16"/>
  22. <item
  23. android:id="@+id/font_18"
  24. android:title="@string/font_18"/>
  25. </group>
  26. </menu>
  27. </item>
  28. <!-- 第二个菜单项:普通菜单-->
  29. <item
  30. android:id="@+id/plain_item"
  31. android:title="@string/palin_item"
  32. android:showAsAction="always|withText">
  33. </item>
  34. <!-- 第三个菜单项:字体颜色-->
  35. <item
  36. android:title="@string/font_color"
  37. android:icon="@drawable/color"
  38. android:showAsAction="always|withText">
  39. <!-- 定义一组单选菜单项 ,然后定义一组菜单选项-->
  40. <menu>
  41. <group>
  42. <item
  43. android:id="@+id/red_font"
  44. android:title="@string/red_title"/>
  45. <item
  46. android:id="@+id/blue_font"
  47. android:title="@string/blue_title"/>
  48. <item
  49. android:id="@+id/green_font"
  50. android:title="@string/blue_title"/>
  51. </group>
  52. </menu>
  53. </item>
  54. </menu>

注释:android:showAsAction属性,用于指定了菜单项在ActionBar上显示的形式或位置,主要有以下几种值可选:

>always:表示永远显示在ActionBar中,如果屏幕空间不够则无法显示;

>ifRoom:表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在折叠图标中

>never:表示永远显示在折叠图标中,用户单击该折叠图标将显示所有选项菜单项

>withText:表示显示菜单项的名称

(2)src/MainActivity.java

  1. package com.android.android_actionbar_2;
  2. import android.app.ActionBar;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.graphics.Color;
  6. import android.os.Bundle;
  7. import android.view.Menu;
  8. import android.view.MenuInflater;
  9. import android.view.MenuItem;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. public class MainActivity extends Activity {
  13. ActionBar actionbar;
  14. private TextView txt;
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. /1./获取当前Activity的actionBar
  20. actionbar=getActionBar();
  21. }
  22. //2.将Xml资源添加到menu菜单中
  23. public boolean onCreateOptionsMenu(Menu menu)
  24. {
  25. MenuInflater inflator=new MenuInflater(this);
  26. inflator.inflate(R.menu.menu, menu);
  27. return super.onCreateOptionsMenu(menu);
  28. }
  29. //3.响应并实现菜单项功能
  30. public boolean onOptionsItemSelected(MenuItem mi)
  31. {
  32. if(mi.isCheckable())
  33. {
  34. mi.setChecked(true);
  35. }
  36. switch(mi.getItemId())
  37. {
  38. //设置字体大小
  39. case R.id.font_10:
  40. txt.setTextSize(10*2);
  41. break;
  42. case R.id.font_12:
  43. txt.setTextSize(12*2);
  44. break;
  45. case R.id.font_14:
  46. txt.setTextSize(14*2);
  47. break;
  48. //设置字体颜色
  49. case R.id.blue_font:
  50. txt.setTextColor(Color.BLUE);
  51. mi.setChecked(true);
  52. break;
  53. case R.id.green_font:
  54. txt.setTextColor(Color.GREEN);
  55. mi.setChecked(true);
  56. break;
  57. //设置普通菜单响应
  58. case R.id.plain_item:
  59. Toast toast=Toast.makeText(MainActivity.this, "您单击了普通菜单", Toast.LENGTH_SHORT);
  60. toast.show();
  61. break;
  62. }
  63. return true;
  64. }
  65. }

(3)效果演示

3.启用程序图标导航

   为了实现将应用程序图标转变成可以点击的图标,可以调用ActionBar的以下方法:

>setDisplayHomeAsUpEnabled(boolean showHomeAsUp):设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头;

>setDisplayOptions(int options):通过传入int类型变量来控制该ActionBar的显示选项;

>setDisplayShowHomeEnabled(boolean showHome):设置是否显示应用程序的图标;

>setHomeButtonEnabled(boolean enabled):设置是否将应用程序图标转换变成可点击的按钮;

源码实战:

功能:将该Activity的程序图标转变成可点击的图标,并控制用于单击该图标时返回程序的主Activity.

package com.example.actionbar;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
/**
 *	项目名称/版本号:Actionbar/v1.0
 *	包   名:com.example.actionbar
 *	类描述:启用程序图标导航.点击应用程序图标,返回主界面
 *	创建人:jiangdongguo
 *	创建时间:2015-6-12 下午8:20:14
 * 博客地址:http://blog.csdn.net/u012637501
 */
public class ActionHome extends Activity {
 private ActionBar actionBar;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //a.获得ActionBar实例
  actionBar = getActionBar();
  //b.设置是否显示应用程序图标
  actionBar.setDisplayShowHomeEnabled(true);
  //c.设置是否将应用程序图标转换变成可点击的按钮
  actionBar.setHomeButtonEnabled(true);
  //d.将应用程序图标设置为可点击的按钮并在图标上添加向左箭头
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  return super.onCreateOptionsMenu(menu);
 }
 /**
  *选项菜单的菜单项被单击后的回调方法
  * */
 public boolean onOptionsItemSelected(MenuItem item) {
  //判断菜单项是否能被点击,是则使能菜单项
  if(item.isChecked()){
   item.setChecked(true);
  }
  //判断单击的是哪个菜单项,并作出相应的响应
  switch (item.getItemId()) {
  case android.R.id.home:
   Intent intent = new Intent(ActionHome.this,MainActivity.class);
   startActivity(intent);
   this.finish();
   break;
  default:
   break;
  }
  return true;
 }
}

效果演示:

4.使用View作为Action View

  ActionBar上除了可以显示普通的Action Item之外,还可以显示普通的UI组件(widget)作为一个功能按钮的替代。操作视图提供了快速访问行为而不改变活动或片段,且没有替换动作栏。例如,如果你想实现搜索动作,可以在action
bar中嵌入一个SearchView窗口部件。为了实现一个action view到动作栏中,我们可以使用actionLayout or actionViewClass属性来指定一个布局(xml)资源或者窗口部件widget到Action
Bar.具体操作:

>定义Action Item时,使用android:actionViewClass属性指定Action View的实现类(widget);

>定义Action Item时,使用android:actionLayout属性指定Action View对应的视图(layout);

(1)菜单资源res/menu/menu.xml

在菜单资源中定义Action Item,但这Action Item使用的是Action View而不是不同的Action Item。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  3. <!-- Action Item为widget-->
  4. <item
  5. android:id="@+id/search"
  6. android:title="搜索"
  7. android:orderInCategory="100"
  8. android:showAsAction="ifRoom|collapseActionView"
  9. android:actionViewClass="android.widget.SearchView"/>
  10. <!-- Action Item为视图资源-->
  11. <item
  12. android:id="@+id/clock"
  13. android:title="模拟时钟"
  14. android:orderInCategory="100"
  15. android:showAsAction="ifRoom|collapseActionView"
  16. android:actionLayout="@layout/clock"/>
  17. </menu>

其中,clock视图实现代码如下/res/layout/clock.xml:

<?xml version="1.0" encoding="utf-8"?>

<AnalogClock

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"

android:layout_height="wrap_content"   />

(2)为Action View添加事件监听器

Action视图的事件监听主要在onCreateOptionsMenu()方法中实现,通过调用MenuItemCompat.getActionView并传递相应的菜单项(MenuItem)来获取Action视图对象。

  1. public boolean onCreateOptionsMenu(Menu menu) {
  2. getMenuInflater().inflate(R.menu.menu, menu);          //加载菜单资源
  3. MenuItem searchItem = menu.findItem(R.id.search);
     //获得MenuItem对象
  4. SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);  //获得Action视图对象
  5. // Configure the search info and add any event listeners  //为Action视图对象注册事件监听器
  6. ...
  7. return super.onCreateOptionsMenu(menu);
  8. }

(3)效果如下

 

注:android:showAsAction="collapseActionView" 
属性值表示该空间可以被合并成一个Action按钮。

时间: 2024-08-07 04:34:16

Android活动条(actionbar)使用详解(一)的相关文章

Android活动条(actionbar)使用详解(二)

  1.使用ActionBar实现Tab导航 使用ActionBar实现Tab导航的思路是:AcitonBar通常与Fragment结合使用实现Tab导航.ActionBar在顶端生成多个Tab标签,当用户点击某个Tab标签时,系统根据用户点击事件导航指定Tab页面.实现步骤如下: (1)调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)方法设置使用Tab导航方式; (2)调用ActionBar的addTab()方法添加多个

【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义&#183;详解

原文地址:http://www.cnblogs.com/yc-755909659/p/4290784.html 一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和menu,在程序运行中一直置于顶部,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计可以展示更多丰富的内容,方便操控. 二.ActionBar的功能 用图的方式来讲解

【Android UI设计与开发】顶部标题栏(一)ActionBar 奥义&#183;详解

转自:http://www.cnblogs.com/yc-755909659/p/4290784.html 一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和menu,在程序运行中一直置于顶部,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计可以展示更多丰富的内容,方便操控. 二.ActionBar的功能 用图的方式来讲解它的

Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送,写这个系列真的很要命,你要去把他们的API文档大致的翻阅一遍,而且各种功能都实现一遍,解决各种bug各种坑,不得不说,极光推送真坑,大家使用还是要慎重,我们看一下极光推送的官网 https://www.jpush.cn/common/ 推送比较使用,很多软件有需要,所以在这个点拿出来多讲讲,我们本节

[Android新手区] SQLite 操作详解--SQL语法

该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解析大部分标准SQL语言.但它也省去了一些特性并且加入了一些自己的新特性.这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的.查看关键字列表. 如下语法表格中,纯文本用蓝色粗体显示.非终极符号为斜体红色.作为语法一部分的运算符用黑色Roman字体表示. 这篇文档只是对SQLite实现的SQ

Android组件系列----Activity组件详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3924567.html 联系方式:[email protected] [正文] 注:四大组件指的是应用组件:Activity.Service.BroadcastReceiver.ContentProvider:之前的控件指的是UI组件. 博文目录: 一.Activity简介 二.Activity的状

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

Android开发之通知栏Notification详解

Notification的用法  --- 状态栏通知 发送一个状态栏通知必须的两个类: 1. NotificationManager   --- 状态栏通知的管理类,负责发通知,清除通知等 NotificationManager : 是一个系统Service,必须通过 context.getSystemService(NOTIFICATION_SERVICE)方法获取 NotificationManager notificationManager = (NotificationManager)

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大