码迷,mamicode.com
首页 > 其他好文 > 详细

扩展用户体验之操作栏ActionBar

时间:2015-12-03 18:45:26      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

一、什么是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);

扩展用户体验之操作栏ActionBar

标签:

原文地址:http://www.cnblogs.com/xl-xlg/p/5017012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!