想实现图标向上导航功能,步子分两步走:

  1.样式上要改变-->图标要变成可点击的按钮,并有一个向左的箭头。

  2.功能上要实现-->实现向上导航

  首先谈第一步:

  对于拥有fragment的activity来说,想要让图标具有向上导航的功能,需要在fragment中设置activity的actionBar的showHomeAsUp的值为true。

  

  

  值得读者注意的是,由于setDisplayHomeAsUpEnabled()方法是在API11以后出现的,因此我们需要采取兼容措施:

  1.增加TargetApi注释,避免Android Lint报错

  2.进行系统版本判断实现向下兼容

  再来谈第二步:无论什么功能,都应该在响应方法里写。

  请读者参考http://www.cnblogs.com/JiMoRuXue/p/5048297.html,了解选项菜单的创建,响应。

  这里和选项菜单类似:

  首先在fragment中设置HasOptionsMenu的值为true(目的是告诉FragmentManager,该fragment要代表其所在activity实现选项菜单的回调方法)

  然后重写onOptionsItemSelected(MenuItem item)方法。

  值得注意的是,选项菜单具有自己的xml视图以及item的资源ID,但是图标已具有现成的资源ID:android.R.id.home

  

    现在我们需要做的是什么呢?可能大部分人想到的是用startActivity(i)跳转到上层的activity。这里引入一个重要的知识点:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),该方法会让系统首先在回退栈中寻找指定activity的实例,如存在,就弹出在实例activity上面的所有activity,让启动的activity出现在栈顶。

    不过还有另一种更好的实现层级式导航的方法:NavUtils类+manifest元数据

    步骤如下:

      1.在manifest为activity添加元数据(name="android.support.PARENT_ACTIVITY"),这个元数据描述了该Activity的父级Activity

      2.调用NavUtils.getParentActivityName(Activity),检查元数据中是否指定了父级Activity,如指定有,执行3

      3.调用NavUtils.navigateUpFromSameTask(getActivity())

    

    

    为什么说NavUtils+元数据更好呢?

     1.将描述Activity之间关系的语句由java转为了xml配置

    2.保证了fragment的独立性

    另外补充一点知识:在如何获取activity的父级activity时,前面讲的是使用NavUtils的getParentActivityName()方法,该方法本质上是NavUtils获取Activity的meta-data,看看有没有

叫"android.support.PARENT_ACTIVITY"的,有就获取它的值。

    但我们也可以通过普适性的方法,获取meta-data的信息,这样就可以不用非将acitivy的name设为android.support.PARENT_ACTIVITY了

    因为所有的meta-data最终都是以bundle的形式保存在PackageManager中,因此代码如下

    

    此外,需要说明的是,操作栏是API11级以后出现,因此需要兼容。而选项菜单并不是API11级以后出现的。

    

    

Android-操作栏之图标导航的更多相关文章

  1. easyui datagrid 表格中操作栏 按钮图标不显示

    jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染 解决办法: 使用解析器 Parser(解析器) $.parser.parse();       // 解析所有页面 $.par ...

  2. Android 关于操作栏 ActionBar 的设计原则【转载+整理】

    原文地址 本文内容 操作栏目的 基本布局 适应旋转和不同的屏幕尺寸 副操作栏的布局 操作栏按钮 上下文操作栏 操作栏清单 设计原则就是为你在编写 Android APP 时,尤其是如何安排操作按钮的位 ...

  3. Android设计元素-操作栏

    原文链接:http://android.eoe.cn/topic/android_sdk 操作栏 - Action Bar “操作栏”对于 Android 应用来说是最重要的设计元素.它通常在应用运行 ...

  4. [Android系列—] 4. 加入操作栏(Action Bar)

    前言 操作栏是最重要的设计元素之中的一个,使用它来实现你的应用程序活动.通过提供多种用户界面功能, 使应用程序高速和其它的Andorid应用程序一致, 以便被用户熟悉和接受. 主要功能包括: 1. 标 ...

  5. Android下拉刷新底部操作栏的隐藏问题

    最近自己编写下拉刷新的时候,发现了一个问题,就是有一个需求是这样的:要求页面中是一个Tab切换界面,一个界面有底部操作栏,不可下拉刷新,另一个界面没有底部操作栏,但可以下拉刷新. 按照平常的做法,我在 ...

  6. [Android]通知栏与操作栏的高度-State Bar & Navigation Bar

    1.通知栏 public static int getStatusBarHeight() { Resources resources = Resources.getSystem(); int reso ...

  7. android 自己定义状态栏和导航栏分析与实现

    效果 android 4.4之后,系统是支持自己定义状态栏和导航栏的.举个最典型的样例就是bilibiliclient了(iOS版本号和android版本号能用两套全然不一样符合各自系统的设计ui,良 ...

  8. cocos2d-x视频控件VideoPlayer的用户操作栏进度条去除(转载)

    目前遇到两个问题: (1)视频控件移除有问题,会报异常. (2)视频控件有用户操作栏,用户点击屏幕会停止视频播放. 对于第一个问题,主要是移除控件时冲突引起的,目前简单处理是做一个延时处理,先stop ...

  9. Android怎么使用字体图标 自定义FontTextView字体图标控件-- 使用方法

    首先我想说明一下字体图标的好处,最大的好处就是自适应了,而且是使用TextView 不用去切图,是矢量图 灵活调用 第一步我要说明一下一般字体图标的来源,我这里使用的是  --阿里巴巴矢量图标库 -网 ...

随机推荐

  1. java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理

    XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlA ...

  2. showModalDialog-父窗体子窗体

    showModalDialog使用例子,父窗口向子窗口传递值,子窗口设置父窗口的值,子窗口关闭的时候返回值到父窗口. farther.html --------------------------- ...

  3. Jquery获取背景图片src路径

    例如获取body的背景: Jquery代码如下: var back = $('body').css('backgroundImage'); back.substring(start,end); //截 ...

  4. wordpress后台打开缓慢的临时解决方法

    解决方法是添加下面的主题在目前的代码在functions.php: //禁用Open Sans class Disable_Google_Fonts { public function __const ...

  5. CentOS下php使用127.0.0.1不能连接mysql的解决方法

    这篇文章主要介绍了CentOS下php使用127.0.0.1不能连接mysql的解决方法,本文原因是SELINUX导致的连接失败,需要的朋友可以参考下 php代码很简单: 复制代码代码如下: $ser ...

  6. linux“批处理”脚本

    依次执行A B C3条语句 最简单的 写如下代码 #!/bin/sh A B C 保存为test.sh然后添加执行权限chmod +x test.sh然后执行该脚本./test.sh

  7. OpenSSL初瞻及本系列的博文的缘由

    OpenSSL初瞻及本系列的博文的缘由1.为什么要写关于“OpenSSL源码分析与学习笔记”系列博文?非常重要的两个原因是Heartbleed和学校课程.我虽然是一个非常崇尚自学的人但是并不代表我不擅 ...

  8. 摇滚吧HTML5!有声前端交互!(Hello, Jsonic!)

    软件工程师们摆弄1和0编写他们的乌托邦,音乐人门把玩12平均律上的音符构筑他们的伊甸园.最近,我偶然看了<蓝色骨头>这部电影,片中的男主角是位黑客,同时又兼具音乐创作的才华.在现实生活中, ...

  9. Collections.shuffle源码阅读

    java.util.Collections /** * Randomly permutes the specified list using a default source of * randomn ...

  10. shell中的替换

    shell中如果存在一些特殊的字符,就需要进行替换,可进行命令替换.变量替换.转义替换 1.转义字符的替换 shell中包含以下的转移字符 \a   响铃警报\\   反斜杠 \b  退格(删除键) ...