标签:
一、什么是ActionBar
熟悉Android的人应该很清楚ActionBar指的是哪一部分,不熟悉的人并不清楚其的重要性,特别是Web app与Hybrid app开发者基本没有这一概念,当然在你们平时的开发中也用到了类似于ActionBar功能的布局部分,只是实现当时不同而已,一个使用Java实现,一个使用html来布局。
那到底什么是ActionBar呢?每个App的不同界面中都有一个相同的部分,这部分UI一般在一个App中是一致的,这部分就是导航栏,导航栏中一般有返回导航菜单,应用图标,产品徽标,当前上下文标题,快捷菜单,以及Tab,例如下图中就是具有返回导航与上下文标题的操作栏(ActionBar)
二、Android中配置是否引入ActionBar
ActionBar并不是每个Activity具有的,有的应用中就看不到这样的操作栏,例如HyBrid app中整个都没有ActionBar,但是有的App中又是用这样的操作栏,这是如何配置的呢?这与Activity的主题有关,例如使用NoActionBar的主题或者使用具有
<item name="android:windowActionBar">false</item>
属性的主题style时,该Activity就不存在ActionBar,这个不存在并不表示不显示,而是没有该实例,即通过mcontext.getActionBar()获取到的是null,相反的,如果要使用ActionBar,那么就不能设置Activity的主题具有该属性。
三、静态ActionBar
静态ActionBar是指不可操作的ActionBar,就是显示给用户“看”的部分,而不是点的部分。
其中包括:图标、徽标、标题、二级标题
图标:通过Activity注册时的android:icon设置或者通过getActionBar().setIcon()设置
徽标:通过Activity注册时的android:logo设置或者通过getActionBar().setLogo()设置
标题:通过Activity注册时的android:label设置或者通过getActionBar().setTitle()设置
二级标题:通过getActionBar().setSubTitle()设置
图标与徽标的区别:
他们两者都是一个图片,显示的位置都是在标题的左侧,也就是最左侧,但是两者只能有一个显示,无法同时显示,图标表示的应用程序快捷图标,徽标通常是应用或者企业的品牌,显示徽标的时候通常不会再显示标题,即一般的显示组合是:图标+标题||徽标;图标是大小固定的正方形,无法改变,而徽标的宽度是不固定的,通常情况下控制徽标的宽度为图标的2倍。
显示与隐藏:
ActionBar的显示:getActionBar().show();
ActionBar的隐藏:getActionBar().hide();
标题的显示与隐藏:getActionBar().setDisplayShowTitleEnable(true|false);
图标与徽标的显示切换:如果两者都有,则默认显示徽标,当两者都有又想显示图标是:getActionBar().setDisplayUseLogoEnable(false);
图标与徽标同时隐藏:getActionBar().setDisplayShowHomeEnable(false);
四、动态ActionBar
动态ActionBar表示用户能够“点”的操作栏。
ActionBar中一般至少有一个返回上一级的按纽,有的甚至还有下拉菜单按纽,Tab等快捷菜单。
让静态的ActionBar动起来:
getActionBar().setHomeButtonEnabled(true);
一行代码能够让ActionBar中左侧图标、徽标、标题部分能够点击,当然如果设置
getActionBar().setDisplayHomeAsUpEnabled(true);
这样就会在最左边添加一个返回箭头,其左侧点击ActionBar内部会广播一个事件,触发Activity中的onOptionsItemSelected事件,在该事件中判断item的id,来执行相应操作,因为其他的快捷菜单按钮也会触发该事件
实现点击返回上一级Activity的代码实例:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.t_act); getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } }
另一种简单的方式是在Activity注册的时候指定其父Activity:android:parentActivityName="",那么就不需要重写onOptionsItemSelected方法就可以实现点击返回父Activity了,建议使用第一种,因为第二种返回的动画与打开新Activity动画一样,同时不利于Activity多处复用,如果一个Activity可能存在多个父Activity,这样就没办法了,而且,返回按钮一般不仅仅只是执行返回操作,有时需要关闭一些view或对话框形式Activity,等关闭这些之后再点击才关闭当前Activity。
返回按钮图片自定义方法:
方法一:该方法可能较低版本的Android API不支持
getActionBar().setHomeAsUpIndicator(R.drawable.back6);
方法二:在样式中配置,所有都支持
<item name="android:homeAsUpIndicator">@drawable/back6</item>
导航Tab键的使用
配置导航Tab显示:getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
通常显示Tab的时候也是禁用标题的,而Tab的添加需要先创建Tab,然后像actionbar中addTab(tab);
标签:
原文地址:http://www.cnblogs.com/xl-xlg/p/5017012.html