2013-2-19 Android之ActionBar学习(转)

Android之ActionBar学习 - Android移动开发技术文章_手机开发 - 红黑联盟

资讯 |  安全 |  论坛 |  下载 |  程序开发 |  源码 |  站长学院 |  电子书 |  QQ |  网络 |  系统 |  考试认证 |  数据库 |  读书 |  考试 |  手册 | 
Web开发| 软件开发| 安全编程| 移动开发| 其他综合|
首页> 程序开发 > 移动开发 > Android > 正文
Android之ActionBar学习
2012-06-22 11:09:33     我来说两句      
收藏    我要投稿

关于那个问题:是关于如何生成如下图所示之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。

下面开始正题。

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

添加ActionBar
     不需要导入ActionBar,因为在android3.0或者以上版本中,ActionBar已经默认的包含在Activity中
     在Android3.0的默认主题“holographic”中,已经创造了ActionBar
     当android:minSdkVersion 或者 android:targetSdkVersion 属性被设置成11或者更高时,应用会被认为是Android3.0版本(默认含有ActionBar)
去除ActionBar 
     我们可以通过把主题设置为Theme.Holo.NoActionBar为一个Activity去除掉ActionBar。                                                                                        <activity android:theme="@android:style/Theme.Holo.NoActionBar">
     我们也可以通过在代码中调用show()或者hide()方法来相应的显示或者隐藏ActionBar
添加Action Item
               每一个操作菜单的菜单项都可以成为ActionBar中的一个Action Item
       参考代码如下:

ActionBarDemoActivity.java:

[java] 
public class ActionBarDemoActivity extends Activity 

    /** Called when the activity is first created. */ 
    @Override 
    public 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

[html]
<?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" > 
 
    <Button 
        android:id="@+id/hideBt" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Hide The Action Bar" > 
    </Button> 
 
    <Button 
        android: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:
     
[java] 
public class ActionBarXMLActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
        MenuInflater inflater = getMenuInflater(); 
        inflater.inflate(R.menu.optionsmenu, menu); 
        return true; 
    } 
}

optionsmenu.xml:

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

效果图:

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

其效果图如下:

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

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

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

[java] 
@Override 
    public 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) 来实现。
[java] 
public class HomyUpActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
    } 
    @Override 
    protected void onStart() { 
        super.onStart(); 
        ActionBar actionBar = this.getActionBar(); 
        actionBar.setDisplayHomeAsUpEnabled(true); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        MenuInflater inflater = getMenuInflater(); 
        inflater.inflate(R.menu.optionsmenu, menu); 
        return true; 
    } 
 
}

效果图:

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

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

效果图:

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

代码示例:
       TabsActivity.java
[java]
public class TabsActivity extends Activity 

    /** Called when the activity is first created. */ 
    @Override 
    public 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; 
        } 
        @Override 
        public void onTabSelected(Tab tab, FragmentTransaction ft) 
        { 
            ft.add(R.id.fragment_place, fragment, null); 
        } 
    } 
     
}

AFragmentTab.java
[java] 
public class AFragmentTab extends Fragment 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) 
    { 
        return inflater.inflate(R.layout.fragment_a, container, false); 
    } 
}

BFragmentTab.java
[java] 
public class BFragmentTab extends Fragment 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) 
    { 
        return inflater.inflate(R.layout.fragment_b, container, false); 
    } 
}

CFragmentTab.java
[java]
public class CFragmentTab extends Fragment 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) 
    { 
        return inflater.inflate(R.layout.fragment_c, container, false); 
    } 
}

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

效果图:
作者:aomandeshangxiao

点击复制链接 与QQ/MSN好友分享!
分享到:
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:Android 获取汉字拼音
下一篇:Android Service学习之AIDL, Parcelable和远程服务
相关文章
Android曝安全漏洞 黑客可安装击键记
谷歌Android惊爆两安全漏洞
Android漏洞让Verizon Droid手机屏幕
黑客破解iPhone安装Android系统(图)
IBM推Android安全协作软件 进军移动互
Win7不适合平板 HP戴尔转投Android
Android 2.2源码公布 黑客将移植至8
报告称两成Android应用存安全风险 谷
网秦邹仕洪:Android将成手机病毒主战
首款Android平台病毒出现 信息安全不
图文推荐
Android系统Surface制
模仿android4.0的通知
Android自带音乐播
Android + NDK

排行
热门
630 | Android中自定义控件和属性
488 | Android中的"Unable to start acti
470 | android屏幕分辨率适配
431 | android异步任务详解 AsynTask
412 | android开机启动流程说明
402 | android 裁剪图片大小 控制图片尺寸
360 | Android include标签
359 | android设置背景图片xml的background和
Android开发学习笔记:浅谈WebView
Android中ADT插件的安装
Android Canvas类介绍(zhuan)
浅谈android的selector背景选择器
Cannot complete the install bec
Android 4.0 SDK 环境搭建体验(Wi
Android中Cursor类的概念和用法
Android开发学习笔记:浅谈GridView
阿里云手机应用开发点
编写高效的android代
▪ Android AIDL 远程服务器使用示例
▪ 阿里云手机应用开发点滴
▪ 编写高效的android代码(译文)
▪ 给Android应用开发者的十个建议
▪ android网络业务的封装与调度
▪ Android_手把手教你写跳跃类游戏(3)
▪ Android 4.1 Surface系统变化说明

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站

posted on 2013-02-19 14:32 蓝少泽 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Jack-Lu/archive/2013/02/19/2917040.html

2013-2-19 Android之ActionBar学习(转)相关推荐

  1. Android笔记 actionbar学习

    原文:郭霖的博客 http://blog.csdn.net/guolin_blog/article/details/18234477 源代码: http://download.csdn.net/dow ...

  2. Android基础知识点学习总结

    Android基础知识点学习总结 安卓基础知识个人学习笔记分享~ 一.Android系统架构 Linux内核层→系统运行层→应用框架层→应用层 1.Linux内核层:Android系统是基于Linux ...

  3. [转载]关于Android ProGuard混淆学习记录

    转自:http://www.cnitblog.com/zouzheng/archive/2011/01/12/72630.aspx 前段时间把Android的工程用Ant Build搞定后,现在需要把 ...

  4. Android Qcom Display学习(一)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) LCD的结构 TFT-LCD屏幕构造组成原理 Android LCD(一):LCD基本原理篇 LCD: 奇景光电 ...

  5. 2013年中国android智能手机用户调查研究报告,ZDC:2013年7月中国智能手机市场分析报告...

    2013年7月中国智能手机新品数量虽然较少,但却不乏看点,7月31日,小米联合QQ空间发布首款四核799元红米手机,这让本已竞争激烈的千元以下智能手机市场更加不平静,同时苹果廉价iPhone即将发布的 ...

  6. 车载多媒体Android开发平台学习心得

    Android平台工具学习 一.Android平台 Eclipse+ ADT+SDK 1.1.准备工作 进行开发前的安装配置: ①Java:先安装java,配置JDK环境变量: ②Eclipse:使用 ...

  7. Android Qcom Display学习(四)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) DRM Linux DRM(二)基本概念和特性 DRM(Direct Rendering Manager)学习简 ...

  8. 2022最新Android开发全套学习资料(知识笔记+技能图谱)3-5年开发者进阶提升

    前言 本人2013年由 java 转到 Android 开发,十年间,我从小厂打杂到进入到核心团队,再跳槽到大厂,在华为呆过一段时间,18年四月份进了阿里一直到现在.这期间,我见证过很多人的成败起落, ...

  9. 2021年超详细的-Android超神学习路线总结--纯干货分享(字节,阿里,腾讯大牛联合打造)

    前言 2021年秋招没有找到满意工作的童鞋,考研结果不理想的童鞋,留学生回国的童鞋们,都开始准备2021年的春招了,如果想从事Android开发工作,可以参考本文. 本文整理了Android开发的学习 ...

最新文章

  1. matlab字符处理
  2. javascript专题汇总
  3. 添加Expires头
  4. 消息队列一直建立tcp连接_云架构那些事儿:为什么我的TCP连接建立异常?
  5. mock如何为空_如何 mock 数据
  6. clone远程代码 在不同电脑上git_Git 如何 clone 远程 非 master 分支的代码
  7. cadence设计运算放大器_「好设计论文」一种用于高精度DAC的实用型CMOS带隙基准源...
  8. 在服务器上安装centos系统
  9. 第二章注解深入浅出(三、插桩)
  10. C++ 167. 两数之和 II 633. 平方数之和
  11. 【读书笔记 | 自动驾驶中的雷达信号处理(第4章 雷达波形及其数学模型)】
  12. 如何增加微信朋友圈分享链接的小图片
  13. 大学四年一路走来,我把这些私藏的算法学习工具全贡献出来了!
  14. 【转载】《IT经理世界》:腾讯的瓶颈
  15. Maven与nexus
  16. 技术干货:赛车游戏中最短路径和最小曲率路径算法
  17. 基于计算机毕业设计的asp.net论文选题
  18. 2021全国特种设备-R2移动式压力容器充装模拟考试题库一[安考星]
  19. python区间_Python区间库interval快速入门
  20. 联想a366t 刷android4,联想A366T刷机教程.doc

热门文章

  1. 整理了4个B端产品调研网站,不花一分钱获得最全面的产品体验
  2. 前阿里财务人告诉你:抛弃Excel,原来报表竟然还能这么快
  3. mysql error 1837_MySQL 主从复制错误1837
  4. keil git 编译文件_交叉编译链下的Makefile(STM32F4xx)
  5. java一个类可以同时被访问吗,Java中两个线程是否可以同时访问同一个对象的两个不同的synchronized方法?...
  6. python怎么取出数字,如何在python中取数字的第n个数字
  7. 如何用Linux搭建家庭云服务,使用ownCloud在Linux安装你的个人云服务 私有云的搭建...
  8. 直方图中最大的矩形(单调栈2)
  9. 各种图片格式的生成工具(HTML、URL、BBCode、Markdown、Link)
  10. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——J题 这是一题简单的模拟