Pro Android学习笔记 ActionBar(1):Home图标区
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(1):Home图标区的更多相关文章
- 【转】 Pro Android学习笔记(四九):ActionBar(2):Action图标区
目录(?)[-] ActionBar的隐藏和现实 ActionBar的action图标区 ActionBar的隐藏和现实 ActionBar bar = getActionBar();bar.hide ...
- 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区
目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...
- 【转】 Pro Android学习笔记(五一):ActionBar(4):标准和Tab模式
之前,我们学习的Action Bar是标准模式,Tab模式的如下图所示. 对于Tab,我们在Android学习笔记(二二): 多页显示-Tag的使用中学习过,但Action Bar的tab更适合fra ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(五十):ActionBar(3):搜索条
目录(?)[-] ActionBar中的搜索条 通过Menu item上定义search view 进行Searchable的配置 在activity中将search view关联searchable ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
随机推荐
- decorator & generator & iterator
装饰器(decorator): @staticmethod @classmethod 都既可以使用类名访问,也可以使用对象名访问, 但classmethod在定义时需要cls参数 生成器(genera ...
- go——流程控制
Go在流程控制方面的特点如下: 没有do和while循环,只有一个更广义的for语句. switch语句灵活多变,还可以用于类型判断. if语句和switch语句都可以包含一条初始化子语句. brea ...
- s5_day11作业
# 1 文件内容如下,标题为:姓名,性别,年纪,薪资 # # egon male 18 3000 # alex male 38 30000 # wupeiqi female 28 20000 # yu ...
- NOIP 合唱队形
描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…, ...
- ubuntu16.04的anacoda内置的spyder不支持中文【学习笔记】
执行下面的语句:将libfcitxplatforminputcontextplugin.so复制到anaconda2的安装目录下的platforminputcontexts目录重启生效 cp /usr ...
- ASP.NET CORE MVC 2.0 发布到IIS 配置问题
装完.NET CORE 2.0和IIS , 配置好网站, 报500.19 配置文件错误. 解决方法: 1) 安装.NET Core Windows Server Hosting : https:/ ...
- HDU 1176 免费馅饼 简单动态规划
世道很简单的动态规划,但是却错了,让我很无语,改来改去还是不对,第二天有写就对了,之后我就耐着性子慢慢比较之前的错误代码,发现 第一次错:纯粹用了a[i][j]+=max3(a[i+1][j-1], ...
- 微信小程序选择器
- idea通过springboot初始化器新建项目
1.通过初始化器新建项目,勾选后 对应生成的pom文件 以及生成的包路径 2.生成项目后点击稍后弹出的自动自动导入maven工程的改变,当pom中有依赖改变时会自动刷新导入依赖 3.删除自动生成项目的 ...
- Rotate Image,N*N矩阵顺时针旋转90度
public class RotateImage { public void rotate(int[][] matrix) { if(matrix.length == 1 && mat ...