ActionBar
2015-09-23 16:25
225 查看
一:什么是ActionBar
名为:动作栏。它是一种窗口特性,可以定义使用位置,提供给使用所要执行的动作以及导航模式。它可以自适应不同屏幕。
二:怎么添加ActionBar
1.从android3.0(API级别)开始
当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值。
默认的主题是Theme.Hole,Action bar被包含在这个主题中
注意: 如果你想使用ActionBar API来进行添加导航模式和修改操作栏样式的操作,你应该把minSdkVersion属性设置为“11”或更大的值。
2.Android 3.0以前使用(需要引入appcompat v7 Support Library)
三:ActionBar的主题
1.主题为Theme.Holo,在androidManifest.xml中,Activity标签下使用,比如
1.ActionBar的显示与隐藏可以通过hide()方法对ActionBar进行隐藏,再使用show将其显示,比如:
2.把Activity的主题设置为Theme.Holo.NoActionBar就可以了
1.app icon:可以替换为别的logo
2.View Control
drop-down菜单或tab controls。也可以用来显示非交互的内容,例如app title或更长的品牌信息。
3.action buttons
盛不下的会自动移动到action overflow中。长按可显示action的名称。action Buttons的总宽度不会超过整个ActionBar宽度的50%。一般小于360dp的屏幕宽度只能放置2个icons,360-499dp的可以放置3个icons,500-599dp可以放4个icons,600dp以上可以放5个icons。
4.action overflow
把不常用的Actions移到Action overflow
六:添加动作项
1.所谓动作项就是一个动作按钮,显示在动作栏上,有图标,文字以及点击事件
2.添加动作项:与menu一样,需要在xml中定义,比如:
id:表示动作项的id,与menu项一致
icon:显示在动作栏上的动作项图标
title:动作项文本
注意:以上代码在平板上运行时会直接出现列表项,如果是手机设备还需要使用showAsAction属性,比如:
(1)当动作项没有全部显示时,那些没显示的动作项会隐藏到overflow中,点击overflow会显示一个下拉列表,该列表会显示动作项的title
(2)对于视障用户,可能看不懂图标的意思,而可以通过title理解图标的功能
(3)当用户长按动作项时会弹出title的Toast,起到提示作用
5.showAsAction的属性:
①never:不显示在ActionBar中,对于有menu按键的手机设备,可以点击menu按键进行查看
②ifRoom:当ActionBar有空间时显示动作项,如果没有则不显示,对于有menu按键的手机设备,可以点击menu按键进行查看
③always:一直显示在ActionBar上
④withText:显示图标的同时还要显示title文本
⑤collapseActionView:折叠效果
6.处理动作项点击事件
与menu的点击事件一样,可以通过onOptionsItemSelected() 方法处理点击事件,比如:
当一个狭窄的屏幕(比如纵向的手机屏幕)显示过多的ActionBar动作项时,需要将其分开显示,如图:
实现:在AndroidManifest.xml的activity标签下,使用uiOptions属性,对于老版本还需要添加meta-data标签,例如:
当A界面跳转到B界面时,B界面可以通过上级导航按钮返回A界面
实现:
①在要添加上级导航按钮的Activity中设置下面两个方法
七:Action View
1.定义:动作视图类似于一个Action Button,它自己的UI以及点击事件
2.添加Action View的方式
(1)actionViewClass
使用:
①在Menu的xml文件中设置actionViewClass 属性,值为组件的全路径,比如:
②为Action View添加点击事件
在onCreateOptionsMenu()方法中,找到相应组件,并添加监听事件,如下:
①创建一个布局,该布局将显示在ActionBar上
②在Menu的xml文件中设置actionLayout属性,导入①中创建的布局,如下:
③为Action View添加点击事件
使用OnActionExpandListener 监听器,重写两个方法
①展开:menu.findItem(R.id.action_layout).expandActionView();
②折叠:menu.findItem(R.id.action_layout).collapseActionView();
八:Action Provider(分享)
类似一个Aciton View,有自己的布局和点击事件,可以提供分享功能
实现Provider的两种方式
1.ShareActionProvider(系统自带)
(1)使用:
①在Menu的xml文件中设置actionProviderClass 属性,值为ShareActionProvider的全路径,比如:
当用户点击ShareActionProvider列表,系统将常用的应用放到列表顶部,记录此功能有两种方式
①通过系统默认的xml文件进行保存
②使用setShareHistoryFileName("xxx.xml")方法保存
上述两个文件都属于私有文件,在data/data/路径中
2.自定义Provider
①创建一个类,继承ActionProvider
②重写三个方法:
1)ActionProvider():构造器,传入一个context
2)onCreateActionView():使用 1) 提供的context实例化LayoutInflater,导入自定义的布局,并可以添加点击事件,该视图会显示在ActionBar上
3)onPerformDefaultA
9418
ction():当menu item在overflow上被选中时调用,一般设置一些默认操作
九:Navigation Tabs
定义:导航标签,可与fragment结合实现在一个Activity中显示多界面的效果
使用:
1.使用ActionBar对象添加标签
重写方法
注意:重写方法中的FragmentTransaction ft参数,不能添加回退栈,也不能使用commit()方法
名为:动作栏。它是一种窗口特性,可以定义使用位置,提供给使用所要执行的动作以及导航模式。它可以自适应不同屏幕。
二:怎么添加ActionBar
1.从android3.0(API级别)开始
当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值。
默认的主题是Theme.Hole,Action bar被包含在这个主题中
注意: 如果你想使用ActionBar API来进行添加导航模式和修改操作栏样式的操作,你应该把minSdkVersion属性设置为“11”或更大的值。
2.Android 3.0以前使用(需要引入appcompat v7 Support Library)
三:ActionBar的主题
1.主题为Theme.Holo,在androidManifest.xml中,Activity标签下使用,比如
<activity android:name=".HoloActivity" android:theme="@android:style/Theme.Holo" />
</pre><p>2.常用主题</p><p>@android:style/Theme.Holo.NoActionBar:无动作栏</p><p>@android:style/Theme.Holo.Light:灰色动作栏</p><p>@android:style/Theme.Holo.DarkActionBar:默认主题,为黑色</p><p>3.使用logo</p><p>logo主要为app厂商的logo,在AndroidManifest.xml文件activity标签下添加,比如:</p><pre name="code" class="html"><activity android:name="com.example.actionbardemo1.LightActivity" android:theme="@android:style/Theme.Holo.Light" android:logo="@drawable/camera"/>四:ActionBar的显示与隐藏
1.ActionBar的显示与隐藏可以通过hide()方法对ActionBar进行隐藏,再使用show将其显示,比如:
<activity android:name=".HoloActivity" android:theme="@android:style/Theme.Holo" <pre name="code" class="html">ActionBar actionBar = getActionBar();//获取ActionBar if(actionBar.isShowing()){//判断动作栏是否显示 actionBar.hide();//隐藏 }else{ actionBar.show();//显示 }/>
2.把Activity的主题设置为Theme.Holo.NoActionBar就可以了
<activity android:theme="@android:style/Theme.Holo.NoActionBar" />五:ActionBar的4个区域
1.app icon:可以替换为别的logo
2.View Control
drop-down菜单或tab controls。也可以用来显示非交互的内容,例如app title或更长的品牌信息。
3.action buttons
盛不下的会自动移动到action overflow中。长按可显示action的名称。action Buttons的总宽度不会超过整个ActionBar宽度的50%。一般小于360dp的屏幕宽度只能放置2个icons,360-499dp的可以放置3个icons,500-599dp可以放4个icons,600dp以上可以放5个icons。
4.action overflow
把不常用的Actions移到Action overflow
六:添加动作项
1.所谓动作项就是一个动作按钮,显示在动作栏上,有图标,文字以及点击事件
2.添加动作项:与menu一样,需要在xml中定义,比如:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" /> <item android:id="@+id/action_compose" android:icon="@drawable/ic_action_compose" android:title="@string/action_compose" /> </menu>3.在Activity中的onCreateOptionsMenu() 导入该xml文件
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); }4.item标签属性
id:表示动作项的id,与menu项一致
icon:显示在动作栏上的动作项图标
title:动作项文本
注意:以上代码在平板上运行时会直接出现列表项,如果是手机设备还需要使用showAsAction属性,比如:
<item android:id="@+id/action_compose" android:icon="@drawable/favorite" android:showAsAction="ifRoom" android:title="收藏"/>注意:title默认情况不会显示在ActionBar上,但必须定义,原因:
(1)当动作项没有全部显示时,那些没显示的动作项会隐藏到overflow中,点击overflow会显示一个下拉列表,该列表会显示动作项的title
(2)对于视障用户,可能看不懂图标的意思,而可以通过title理解图标的功能
(3)当用户长按动作项时会弹出title的Toast,起到提示作用
5.showAsAction的属性:
①never:不显示在ActionBar中,对于有menu按键的手机设备,可以点击menu按键进行查看
②ifRoom:当ActionBar有空间时显示动作项,如果没有则不显示,对于有menu按键的手机设备,可以点击menu按键进行查看
③always:一直显示在ActionBar上
④withText:显示图标的同时还要显示title文本
⑤collapseActionView:折叠效果
6.处理动作项点击事件
与menu的点击事件一样,可以通过onOptionsItemSelected() 方法处理点击事件,比如:
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_compose: composeMessage(); return true; default: return super.onOptionsItemSelected(item); } }7.拆分动作栏
当一个狭窄的屏幕(比如纵向的手机屏幕)显示过多的ActionBar动作项时,需要将其分开显示,如图:
实现:在AndroidManifest.xml的activity标签下,使用uiOptions属性,对于老版本还需要添加meta-data标签,例如:
<manifest ...> <activity uiOptions="splitActionBarWhenNarrow" ... > <meta-data android:name="android.support.UI_OPTIONS" android:value="splitActionBarWhenNarrow" /> </activity> </manifest>8.上级导航按钮
当A界面跳转到B界面时,B界面可以通过上级导航按钮返回A界面
<img src="https://img-blog.csdn.net/20150923192915114?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
实现:
①在要添加上级导航按钮的Activity中设置下面两个方法
ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);//显示ActionBar尖括号 actionBar.setHomeButtonEnabled(true); //设置ActionBar主按钮可以点击②为导航按钮添加点击事件,其id为android.R.id.home(固定的)
@Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case android.R.id.home://ActionBar主按钮的id Intent intent = new Intent(this,ActionBarDemo4Activity.class); startActivity(intent); break; } return super.onOptionsItemSelected(item); }③在AndroidManifest.xml的activity标签下添加父级Activity的路径
<activity android:name="com.example.actionbardemo4.ScreenB" android:parentActivityName=".ActionBarDemo4Activity" ></activity>取消actionbar左侧的快捷图标和文字
getActionBar().setDisplayShowHomeEnabled(false); getActionBar().setDisplayShowTitleEnabled(false);
七:Action View
1.定义:动作视图类似于一个Action Button,它自己的UI以及点击事件
2.添加Action View的方式
(1)actionViewClass
使用:
①在Menu的xml文件中设置actionViewClass 属性,值为组件的全路径,比如:
<item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="android.support.v7.widget.SearchView" />注意:showAsAction属性中的collapseActionView表示折叠Action View,折叠后会出现一个上级导航按钮
②为Action View添加点击事件
在onCreateOptionsMenu()方法中,找到相应组件,并添加监听事件,如下:
MenuItem searchItem = menu.findItem(R.id.action_settings); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) {//提交查询文本时调用 Toast.makeText(getApplicationContext(), "Submit-->" + query,Toast.LENGTH_SHORT).show(); return false; } @Override public boolean onQueryTextChange(String newText) {//当输入查询文本时调用此方法,为实时调用 Toast.makeText(getApplicationContext(), "Change-->" + newText,Toast.LENGTH_SHORT).show(); return false; } });(2)actionLayout
①创建一个布局,该布局将显示在ActionBar上
②在Menu的xml文件中设置actionLayout属性,导入①中创建的布局,如下:
<item android:id="@+id/action_layout" android:showAsAction="ifRoom|collapseActionView" android:icon="@drawable/clock" android:actionLayout="@layout/actionlayout" android:title="时间"/>注意:collapseActionView同actionViewClass方式,也可以进行折叠
③为Action View添加点击事件
MenuItem clockItem = menu.findItem(R.id.action_layout); View view = clockItem.getActionView(); DigitalClock dc = (DigitalClock) view.findViewById(R.id.digitalClock1); dc.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "ddd",Toast.LENGTH_SHORT).show(); } });3.处理折叠响应
使用OnActionExpandListener 监听器,重写两个方法
@Override public boolean onMenuItemActionExpand(MenuItem item) { Toast.makeText(getApplicationContext(),"<" + item.getTitle() + ">已经展开", Toast.LENGTH_SHORT).show(); return true;// 为false不会展开 } @Override public boolean onMenuItemActionCollapse(MenuItem item) { Toast.makeText(getApplicationContext(),"<" + item.getTitle() + ">已经折叠", Toast.LENGTH_SHORT).show(); return true;// 为false不会折叠 }4.在Activity中通过组件(如Button)折叠或展开Action View
①展开:menu.findItem(R.id.action_layout).expandActionView();
②折叠:menu.findItem(R.id.action_layout).collapseActionView();
八:Action Provider(分享)
类似一个Aciton View,有自己的布局和点击事件,可以提供分享功能
实现Provider的两种方式
1.ShareActionProvider(系统自带)
(1)使用:
①在Menu的xml文件中设置actionProviderClass 属性,值为ShareActionProvider的全路径,比如:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_share" android:title="@string/share" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" /> ... </menu>②在代码中使用setShareIntent()方法,添加分享意图
ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider(); mShareActionProvider.setShareIntent(intent);
Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, "发送的短信内容");(2)特点:
当用户点击ShareActionProvider列表,系统将常用的应用放到列表顶部,记录此功能有两种方式
①通过系统默认的xml文件进行保存
②使用setShareHistoryFileName("xxx.xml")方法保存
上述两个文件都属于私有文件,在data/data/路径中
2.自定义Provider
①创建一个类,继承ActionProvider
②重写三个方法:
1)ActionProvider():构造器,传入一个context
2)onCreateActionView():使用 1) 提供的context实例化LayoutInflater,导入自定义的布局,并可以添加点击事件,该视图会显示在ActionBar上
3)onPerformDefaultA
9418
ction():当menu item在overflow上被选中时调用,一般设置一些默认操作
九:Navigation Tabs
定义:导航标签,可与fragment结合实现在一个Activity中显示多界面的效果
使用:
1.使用ActionBar对象添加标签
ActionBar actionBar = getActionBar(); //设置导航模式 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); Tab tab = actionBar.newTab().setText("MOVIES").setIcon(R.drawable.calendar) .setTabListener(new MyTabListener()).setTag("1"); actionBar.addTab(tab);2.实现ActionBar.TabListener监听器
重写方法
@Override public void onTabSelected(Tab tab, FragmentTransaction ft) { //当点击标签时触发此方法 ... ft.replace(R.id.main, new FragmentA(),"fragmentA");//切换Fragment } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { //未点击标签时触发此方法 } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { //双击标签调用该方法 }
注意:重写方法中的FragmentTransaction ft参数,不能添加回退栈,也不能使用commit()方法
相关文章推荐
- Camera的学习,图片的保存(两种),获取手机图片以及图片信息修改(小的图片浏览器)
- 获取系统数据库中图片和视屏资源
- PAT(甲级)1011
- linux 后台运行程序
- jQuery实现表单验证------equalTo方法
- 断舍离的清空和舍弃之路
- 项目进度估算难题
- Android 应用程序之间内容分享详解(二)
- UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
- HDU 4288 Coder
- 正则表达式
- noip2009 分数线划定 (模拟)
- Discuz!X中SESSION机制实例详解
- 易语言相关知识
- STM32使用DMA加串口空闲中断接收数据
- Unity技巧1
- swift -2 元组,函数
- 图像灰度化的三种方法及matlab,c++,python实现
- gcc -Wl,-M=helloworld.map,--cref
- LinuxSystemProgramming-Syllabus