Android学习笔记(35):Android活动条
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,当中有一个很好用的新功能就是引入的ActionBar,用于代替3.0之前的标题栏,并提供更为丰富的导航效果。
ActionBar能够显示应用图标和Activity标题,还有Action Item活动项。
ActionBar的主要用途:
1.能够设置该Activity的图标和标题。
2.能够配合Fragment用标签或是下拉列表实现不同页面的导航。
3.能够加入Action View为用户提供快捷的訪问。
启用ActionBar:
(1).高于Android3.0的版本号都是默认启用ActionBar的。我们会发现新建的Activity默认继承自ActionBarActivity。
假设希望关闭ActionBar,我们能够把主题设置为Xxx.NoActionBar。像以下这样:
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
(2).我们也能够通过在代码中调用show()或者hide()方法来对应的显示或者隐藏ActionBar
.在我们使用actionBar.hide()方法时。系统默认会将ActionBar占用的空间分配给界面,此时显示的界面将会又一次绘制。相同调用actionBar.show();时也会又一次绘制界面。
假设我们一个程序须要频繁的显示或者隐藏ActionBar的话,这样就不会有良好的效果。
Google提供给一个属性能够让ActionBar浮在界面上,当然你能够让ActionBar的背景为透明。这样会有良好的体验效果。
(3).将选项菜单显示在活动条上
这是为了解决很多手机已经不再提供Menubutton的问题。
MenuItem提供了setShowAsAction(int actionEnum)方法将菜单项显示在ActionBar上作为Action
Item。
actionEnum可选的參数值例如以下:
SHOW_AS_ACTION_ALWAYS:总是将该MenuItem显示在ActionBar上。
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该Action View折叠成普通菜单项
SHOW_AS_ACTION_IF_ROOM:但ActionBar位置足够时显示该MenuItem。
SHOW_AS_ACTION_NEVER:不显示在ActionBar上
SHOW_AS_ACTION_WITH_TEXT:仅仅显示该MenuItem的文本在ActionBar上。
当然我们也能够改动菜单项的XML文件来将其显示在ActionBar上,仅仅须要改动<item.../>的android:showAsAction属性。
当手机顶部的ActionBar空间不够时,Android对不同的设备有不同的处理方式。有MENU按键的手机会将不能显示的菜单项显示在MENU按键激发的菜单上,没有MENU按键的手机则会在ActionBar的最后显示一个折叠图标。单击该图标会出现剩余的菜单项。
(4).将活动条上的应用图标转变成可点击的图标。
能够调用例如以下的这些方法:
setDisplayHomeAsUpEnabled(boolean showHomeAsUp):设置应用图标能否够点击,并在图标上加入一个向左的箭头,通常是用于回退到上级Activity。
setDisplayOptions(int options):控制ActionBar的显示选项。
setDisplayShowHomeEnable(boolean showHome):设置是否显示应用程序图标。
setHomeButtonEnabled(boolean enabled):设置是否将应用程序图标转变成可单击的button。
单击这个图标时。系统会调用Activity带有android.R.id.home ID的onOptionsItemSelected()方法。
为了能响应点击事件,我们还须要在选项菜单的onOptionsItemSelected方法中添加对应的处理。
(5).在活动条上显示Action View
我们能够通过例如以下两种方式在活动条上加入普通的组件。
1.定义Action Item时使用android:actionViewClass属性指定Action
View的实现类。
2定义Action Item时使用android:actionLayout属性指定Action
View的实现类。
(6).使用ActionBar实现Tab导航
在ActionBar上显示多个Tab标签,单击Tab标签会导航到指定的Tab页面。
实现Tab导航的过程例如以下:
1.为ActionBar设置模式为Tab导航setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)。这种方法还能够设置參数ActionBar.NAVIGATION_MODE_LIST。那是用于实现下拉列表的。
2.调用ActionBar的addTab()方法,为活动条加入多个Tab标签。并为每一个Tab标签加入事件监听。
为了更好地展现Tab导航效果。我们经常将ActionBar和Fragment结合使用。
Fragment能够在一个Activity中创建多个页面。详细使用方法后面再介绍。
(7).除了Tab导航外。我们还能够用ActionBar实现下拉式导航。详细过程例如以下:
1.ActionBar设模式为下拉列表setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)。
2.调用setListNavigationCallbacks(SpinnerAdapter adapter,ActionBar.OnNavigationListener callback)方法,为下拉列表加入多个列表项和列表项的事件监听器。
Android学习笔记(35):Android活动条的更多相关文章
- android学习笔记20——ProgressDialog进度条对话框
ProgressDialog==>进度条对话框 ProgressDialog本身就代表一个进度条对话框,程序只需要创建ProgressDialog实例,并将其显示出来就是一个进度条对话框:开发者 ...
- Android学习笔记_76_Android ProgressBar 进度条
android 进度条的样式 例1:(默认样式(中等圆形))Xml代码 <ProgressBar android:id="@+id/progressBar1" ...
- android学习笔记35——AnimationDrawable资源
AnimationDrawable资源 AnimationDrawable,代表一个动画. android既支持传统的逐帧动画(类似于电影方式,一张图片一张图片的切换),也支持通过平移.变换计算出来的 ...
- Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...
下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...
- Android学习笔记之Android Studio添加新的Activity
1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...
- android学习笔记(9)android程序调试学习
相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message); //verbose模式,打印最具体的日志 Log.d(tag,message); // ...
- Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...
- android学习笔记45——android的数据存储和IO
android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...
- Android学习笔记之Android Studio下创建menu布局文件
1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...
随机推荐
- bat 文件读取乱码问题
使用 for 循环 type file1.txt > file2.txt 文件读取后可能会出现乱码,需要在 bat 文件中设置 chcp 表示将批处理设置为 utf-8 编码,这样在生成文件和读 ...
- Python生成器、三元表达式、列表生成式、字典生成式、生成器表达式
什么是生成器:只要函数内部包含有yield关键字,那么函数名()的到的结果(生成器地址)就是生成器,再调用函数不会执行函数内部代码这个生成器本身有 _iter_ he _next_功能(即生成器 ...
- [git 学习篇]远程创库
实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交. 完全 ...
- Flowerpot(单调队列)
描述 Farmer John has been having trouble making his plants grow, and needs your help to water them pro ...
- 【转】Linux多命令顺序执行连接符(; || && |)
当我们需要一次执行多个命令的时候,命令之间需要用连接符连接,不同的连接符有不同的效果.下面我们总结一下,加以区分. (1) ; 分号,没有任何逻辑关系的连接符.当多个命令用分号连接时,各命令之间的 ...
- PHP允许AJAX跨域请求的两种方法
* 一. 服务端设置 header 头允许AJAX跨域 ** 代码如下: // 允许 ityangs.net 发起的跨域请求 header("Access-Control-Allow-Ori ...
- Android中如何截取字符串中某个字符之前或之后的字符串
代码改变世界 Android中如何截取字符串中某个字符之前或之后的字符串 //截取#之前的字符串 String str = "sdfs#d"; str.substring(0, s ...
- [SDOI2010] 地精部落 (组合数学,动态规划)
题目链接 Solution 很巧妙的 DP. 可以看这里的题解. 比我自己讲要好的多. Code #include <bits/stdc++.h> using namespace std; ...
- Java面试题之notify和notifyAll的区别
锁池: 假设线程A已经拥有对象锁,线程B.C想要获取锁就会被阻塞,进入一个地方去等待锁的等待,这个地方就是该对象的锁池: 等待池: 假设线程A调用某个对象的wait方法,线程A就会释放该对象锁,同时线 ...
- PHP中的验证码类(验证码功能设计之二)
运行结果: <!--vcode.class.php内容--> <?php class Vcode { private $width; //宽 private $height; //高 ...