活动条(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还能够依据应用程序当前的功能来提供与其相关的Actionbutton,这些button都会以图标或文字的形式直接显示在ActionBar上。

当然。假设button过多,ActionBar上显示不完。多出的一些button能够隐藏在overflow里面(最右边的三个点就是overflowbutton),点击一下overflowbutton就能够看到全部的Actionbutton了。 当Activity启动的时候。系统会调用Activity的onCreateOptionsMenu()方法来取出全部的Actionbutton,我们仅仅须要在这种方法中去载入一个menu资源(menu/*.xml)。并把全部的Actionbutton都定义在资源文件中面就能够了。

    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):设置是否将应用程序图标转换变成可点击的button;
源代码实战:
功能:将该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.设置是否将应用程序图标转换变成可点击的button
actionBar.setHomeButtonEnabled(true);
//d.将应用程序图标设置为可点击的button并在图标上加入向左箭头
}
@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;
}
}

效果演示:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


4.使用View作为Action View
  ActionBar上除了能够显示普通的Action Item之外,还能够显示普通的UI组件(widget)作为一个功能button的替代。操作视图提供了高速訪问行为而不改变活动或片段,且没有替换动作栏。比如,假设你想实现搜索动作,能够在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" 
属性值表示该空间能够被合并成一个Actionbutton。

Android活动条(actionbar)使用具体解释(一)的更多相关文章

  1. Android学习笔记(35):Android活动条

    在Android3.0之后,Google对UI导航设计上进行了一系列的改革,当中有一个很好用的新功能就是引入的ActionBar,用于代替3.0之前的标题栏,并提供更为丰富的导航效果. ActionB ...

  2. Android活动启动模式

    在android中,android活动是以栈的方式进行存储,在栈中的活动不断被重新激活至前台和不断被终止也不断被排序.因此对于栈中的活动管理也是一个比较麻烦的事情. android给我们提供了两类活动 ...

  3. S5PV210之Sate210-F DIY硬件,移植uboot,kernel,android 活动现在已经进入实施阶段吗,欢迎广大网友参与 !

    大家一起来diy 超低价四核的exynos4412或者Cortex A8S5pv210开源开发板 商业版Sate210已经完成了好久了.Sate4412 也已经出来.但是这两个接口非常全,主要是针对企 ...

  4. 多种的android进度条的特效源码

    多种的android进度条的特效源码,这个源码是在源码天堂那个网站上转载过来的,我已经修改一部分了,感觉很实用的,大家可以学习一下吧,我就不上传源码了,大家可以直接到那个网站上下载吧. 源码天堂下载地 ...

  5. android进度条

    android进度条 1.达到的效果 2.布局代码 先写一个my_browser.xml文件 存放WebView <?xml version="1.0" encoding=& ...

  6. Android活动和碎片的生命周期及addToBackStack()方法

    开始学了Android活动的生命周期后又到了碎片的生命周期,就开始有点乱了.又看了一些总结的文章有一个挺详细的:https://blog.csdn.net/lecepin/article/detail ...

  7. Android 一条竖线或横线、画边框

    Android 一条竖线或横线.画边框 博客分类: android androidshape  1.画线 [img] http://pic002.cnblogs.com/images/2010/122 ...

  8. Android Touch事件传递机制具体解释 下

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38025165 资源下载:http://download.csdn.net/detail/yu ...

  9. Android界面编程--使用活动条(ActionBar)--实现Tab导航

    使用ActionBar结合fragment实现导航 1,调用ActionBar的setNavigationModel(ActionBar.NAVIGATION_MODE_TABS)设置使用tabs导航 ...

随机推荐

  1. The Luckiest number(hdu 2462)

    给定一个数,判断是否存在一个全由8组成的数为这个数的倍数 若存在则输出这个数的长度,否则输出0 /* 个人感觉很神的一道题目. 如果有解的话,会有一个p满足:(10^x-1)/9*8=L*p => ...

  2. 【CF1025C】Plasticine zebra(模拟)

    题意: n<=1e5 思路:可以证明答案即为极长交替出现的串长度之和 需要注意其实这个串是一个环,复制后再做 #include<cstdio> #include<cstring ...

  3. 【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)

    题意: 花花住在 H 国.H 国有 n 个城市,其中 1 号城市为其首都.城市间有 n 1 条单向道路.从任意一个城市出发,都可以沿着这些单向道路一路走到首都.事实上,从任何一个城市走到首都的路径是唯 ...

  4. hdu 4932 BestCoder Round #4 1002

    这题真是丧心病狂,引来今天的hack狂潮~ Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  5. Sublime Text 新文本编辑器(txt3)

    http://www.sublimetext.com/

  6. invoke反射

    mark一下使用用法,原理以后在搞: 无参数: import java.text.SimpleDateFormat; import java.util.Date; import java.lang.r ...

  7. 转载——Step by Step 创建一个 Web Service

    原创地址:http://www.cnblogs.com/jfzhu/p/4022139.html 转载请注明出处 (一)创建Web Service 创建第一个项目,类型选择ASP.NET Empty ...

  8. ping++微信渠道,第二次拉起不能进行支付返回订单号重复问题

    项目中用到了支付功能,采用的是ping++实现的,上线运行一年多都很正常,但是最近突然出现有买家反映说不能进行支付的情况 通过了解和沟通之后发现发现是重复拉起失败,然后我们对问题进行了排查. 测试过程 ...

  9. 一维数组解最长上升公共子序列(LCIS)

    #include<bits/stdc++.h> using namespace std; + ; int n,a[maxn],b[maxn],dp[maxn]; int main() { ...

  10. 做IT这几年,我整理了这些干货想要送给你!

    没有一条路是容易的,特别是转行计算机这条路. 松哥接触过很多转行做开发的小伙伴,我了解到很多转行人的不容易,记得松哥大二时刚刚决定转行计算机,完全不知道这些东西到底应该怎么学,每天就是抱着书啃,书倒是 ...