【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区
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小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区的更多相关文章
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(八四):了解Package(3):包间数据共享
目录(?)[-] 共享User ID的设置 共享资源例子 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务
目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
- 【转】 Pro Android学习笔记(八九):了解Handler(3):延迟执行小例子
目录(?)[-] 小例子 Handler的处理 Activity的代码片段 后台线程和UI的互动 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://b ...
- 【转】 Pro Android学习笔记(八六):了解Package(5):使用lib
目录(?)[-] 在项目中使用lib 源代码 了解一些机制 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowin ...
- 【转】 Pro Android学习笔记(八五):了解Package(4):lib项目
目录(?)[-] 什么是lib项目 小例子 Lib的实现 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- 【转】 Pro Android学习笔记(八三):了解Package(2):包签名过程
目录(?)[-] 类比例子 数字签名 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在W ...
- 【转】 Pro Android学习笔记(八七):了解Handler(1):组件和线程
目录(?)[-] 主线程消息队列和线程池 查看线程信息 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingf ...
- 【转】Pro Android学习笔记(八):了解Content Provider(下中)
在之前提供了小例子BookProvider,我们回过头看看如何将通过该Content Provider进行数据的读取. (1)增加 private void addBook(String name , ...
随机推荐
- [Android]豆瓣FM离线数据
离线目录结构: /sdcard/Android/data/com.douban.radio下 ./cache/fileCaches: 离线音乐歌词(lyric) ./cache/images: 离线音 ...
- python初学者总结
学习python首先配置好工作环境,因为不同版本之间的python是不兼容了 原创:01coding.com win7安装环境过程: 1:下载python 建议下载两个不同版本官方已给出 https: ...
- Javaweb--- EL表达式 JSTL标准标签库
一.EL表达式(expression language): 语法 ${...} jsp中page指令有一个属性叫isELIgnored, 用来标记此页面是否忽略EL表达式, 默认为false 举个例 ...
- androidAndroid开发学习--Ionic+Cordova 环境搭建
我们看 Ionic 能给我们提供什么? 一个样式库,你可以使用它 来 装饰你的 HTML 网页 ,看起来 想 移动程序的 界面,什么 header .content.footer.grid.list ...
- STM32 ~ MDK环境下调试程序 HardFault_Handler 相关
STM32出现HardFault_Handler故障的原因主要有两个方面: 1.内存溢出或者访问越界.这个需要自己写程序的时候规范代码,遇到了需要慢慢排查. 2.堆栈溢出.增加堆栈的大小. 出现问题时 ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单
系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...
- Data Structure Array: Find the minimum distance between two numbers
http://www.geeksforgeeks.org/find-the-minimum-distance-between-two-numbers/ #include <iostream> ...
- codeforces 54A
题意:收到礼物的规则为每个假日必收到一份礼物,每K天里至少收到一份礼物,求出N天中收到的礼物的最小数量. 思路:将N天根据假日所在天数分为一段段,当假日与假日之间间隔天数hol[i]>-hol[ ...
- sqlserver 2008 创建数据库的时候不是空库,里面总有数据的解决办法
SqlServer2008 里面有个系统数据库 Model 数据库,在创建新数据库的时候,会以它为模板创建,所以如果发现你的Model数据库比较大,说明里面有很多模板数据.此时如果需要去创建没有数据的 ...
- nginx源码中upstream的主要流程
upstream 即上游的意思,是一个想对到概念,从客户端到中间的网络链路到服务器到链路中,可以将越接近客户到设备越理解成下游,相反到为上游,所以如果只有一个upstream,可以将其为理解成转发客户 ...