Pro Android学习笔记(四八):ActionBar(1):Home图标区

2013年03月10日
⁄ 综合 ⁄ 共 3256字 ⁄ 字号 ⁄ 评论关闭

ActionBar在Android 3.0 SDK中为平板引入,在4.0中也可以在phone中使用。在title中提供类似tab和菜单的效果,有三种形式:Tabbed action bar,list action bar和standard action bar,我们将在小例子中进行示范。

Home Icon

在Action Bar的最左边,就是Home icon和标题的区域,如上图红圈内。在Home icon的左边有一个返回的的左箭头,通常我们点击这个区域,将回到应用的主activity中。图中的activity是通过主activity的菜单触发,之前已经多次使用,不在重复。activity的layout很简单,只有一个textview在LinearLayout中,其代码如下:

源代码

public class HomePressTestCase1 extends Activity{

    private TextView tv = null;

    private ActionBar  bar = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState);

       

        setContentView(R.layout.basic_test);

        tv = (TextView)findViewById(R.id.textViewId);

        tv.setMovementMethod(ScrollingMovementMethod.getInstance());//设置TextView内容过多时,可以通过鼠标进行滚动

        tv.setText("");

        //在android 4.0后,缺省是不监听Home icon动作,要有效使用,必须进行下面的设置

        bar = getActionBar();  //获取ActionBar的对象,从这个方法也可知action bar是activity的一个属性

        bar.setDisplayHomeAsUpEnabled(true); 


//显示返回的箭头,并可通过onOptionsItemSelected()进行监听,其资源ID为android.R.id.home。

        // bar.setHomeButtonEnabled(true); //不显示箭头符号,允许通过onOptionsItemSelected()进行箭头,但一般的情况下,还是应该给个箭头提示给用户。 

    }

@Override

    public boolean onOptionsItemSelected(MenuItem item) { 

        switch(item.getItemId()){

        case android.R.id.home:
//对用户按home icon的处理,本例只需关闭activity,就可返回上一activity,即主activity。

            showInfo("Home is press");

            finish();

            return true;

        default:

            break;

        }

        return super.onOptionsItemSelected(item);

    }

protected void showInfo(String s){

        tv.setText(s + "\n" + tv.getText());

        Log.d(getLocalClassName(),s);

    }

}

TextView的滚动

我们可以将整个layout设置为ScrollView,但是TextView本身可以设置滚动,在xml中相关的属性如下。并在代码中通过setMovementMethod(ScrollingMovementMethod.getInstance()
)使之有效。

<TextView android:id="@+id/textViewId"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical"
    android:scrollbarStyle="insideOverlay"
    android:scrollbarSize="25dip"
    android:scrollbarFadeDuration="0"
    />

返回主activity或指定activity

如果上一activity并非主activity,而我们有希望直接返回主activity,可以如下处理:

public boolean onOptionsItemSelected(MenuItem item) { 

    switch(item.getItemId()){

    case android.R.id.home:

        showInfo("Home is pressed");

        Intent i = new Intent(this,MainActivity.class);

        //【对于FLAG_ACTIVITY_CLEAR_TOP】:假设目前activity的task堆栈是 MainActivity –> A –> B –> 当前Activity(如果我们按返回键,则依次返回B,A,最后为MainActivity。现在intent要唤起MainActivity,发现在堆栈存在,则将其及之前的全部清楚,在唤起新的activity后,task堆栈为MainActivity。注意,通过跟踪activity的对象,将产生一个新的MainActivity的实例,不是原来的,原来的已经被干掉。又例如当前为C—>

M—>A—>B—>当前,如果打开M,则执行后,推展为C—>M。

        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        startActivity(i);

        return true;

    default:

        break;

    }

    return super.onOptionsItemSelected(item);

}

在Android 4.1之后(API Level 16),有更方便的处理方式,在AndroidManifest.xml中设置返回的activity即可,xml的片段如下:

<activity android:name=".HomePressTestCase1" android:label="@string/test_case_1_home"

            android:parentActivityName="cn.wei.flowingflying.pro.MainActivity" />

我们只需设置parentActivityName,用户按Home icon区域,不需要人工代码进行处理,就可以实现上面通过设置flag的intent代码的实现。java代码可进一步简化:

public boolean onOptionsItemSelected(MenuItem item) {

        if(item.getItemId() == android.R.id.home){

            showInfo("Home is press");

        }   

        return super.onOptionsItemSelected(item);

    }

Pro Android学习笔记 ActionBar(1):Home图标区的更多相关文章

  1. 【转】 Pro Android学习笔记(四九):ActionBar(2):Action图标区

    目录(?)[-] ActionBar的隐藏和现实 ActionBar的action图标区 ActionBar的隐藏和现实 ActionBar bar = getActionBar();bar.hide ...

  2. 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区

    目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity     ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...

  3. 【转】 Pro Android学习笔记(五一):ActionBar(4):标准和Tab模式

    之前,我们学习的Action Bar是标准模式,Tab模式的如下图所示. 对于Tab,我们在Android学习笔记(二二): 多页显示-Tag的使用中学习过,但Action Bar的tab更适合fra ...

  4. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  5. 【转】 Pro Android学习笔记(五十):ActionBar(3):搜索条

    目录(?)[-] ActionBar中的搜索条 通过Menu item上定义search view 进行Searchable的配置 在activity中将search view关联searchable ...

  6. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  7. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  8. 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

  9. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

随机推荐

  1. Runtime.getRuntime().exec()需要注意的地方

    文章出处http://www.cnblogs.com/fclbky/p/6112180.html 有时候我们可能需要调用系统外部的某个程序,此时就可以用Runtime.getRuntime().exe ...

  2. Linux Shell编程第4章——sed和awk

    目录 sed命令基本用法 sed命令实例 命令选项 文本定位 编辑命令 awk编程模型 awk编程实例 1.awk模式匹配 2.记录和域 3.关系和布尔运算符 4.表达式 5.系统变量 6.格式化输出 ...

  3. HackerRank - common-child【DP】

    HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...

  4. asp.net MVC 强类型视图表单Ajax提交的注意事项

    xmfdsh这几天遇到这么一个问题,在MVC中通过model模型生成的强类型视图的表单,在提交后的回调函数并没有发挥作用.如下图: 如上图,无论是通过Ajax.BeginForm或者Html.Begi ...

  5. JAVA实现redis超时失效key 的监听触发

    过期事件通过Redis的订阅与发布功能(pub/sub)来进行分发. 而对超时的监听呢,并不需要自己发布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex, ...

  6. C# Winform 窗体传值 利用委托 子窗体传值给父窗体

    常用的Winform窗体传值有两种方式. 1.更改Form.designer.cs文件,将控件的设为Public,供子窗体访问. 在designer.cs文件的最后,找到你的控件声明. private ...

  7. C#属性器Get和Set

    public sealed class classroom { private List<string> student = new List<string>(); priva ...

  8. 【Flask】WTForms基本使用

    # WTForms笔记:这个库一般有两个作用.第一个就是做表单验证,把用户提交上来的数据进行验证是否合法.第二个就是做模版渲染. ### 做表单验证:1. 自定义一个表单类,继承自wtforms.Fo ...

  9. UVA 10288 Coupons (概率)

    题意:有n种纸片无限张,随机抽取,问平均情况下抽多少张可以保证抽中所有类型的纸片 题解:假设自己手上有k张,抽中已经抽过的概率为 s=k/n:那抽中下一张没被抽过的纸片概率为 (再抽一张中,两张中,三 ...

  10. Spring 静态注入讲解(MethodInvokingFactoryBean)

    /* * Copyright (c) 2017 4PX Information Technology Co.,Ltd. All rights reserved. */package com.fpx.o ...