资讯专栏INFORMATION COLUMN

安卓开发文档学习笔记之ActionBar的使用与适配

Towers / 878人阅读

摘要:自从把加入到后,其在安卓布局中的地位便一路上升。通过安卓的官方文档可以看出,的出现旨在为用户提供一个更加简洁和友好的框架。同时开发者通过采用也可以获得诸多好处比如在高版本安卓系统中更好的稳定性。

ActionBar

自从Android3.0(API 11)把ActionBar加入到android sdk后,其在安卓UI布局中的地位便一路上升。通过安卓的官方文档可以看出,ActionBar的出现旨在为用户提供一个更加简洁和友好的UI框架。同时开发者通过采用ActionBar也可以获得诸多好处(比如APP在高版本安卓系统中更好的稳定性)。

ActionBar的使用

对于Andorid3.0(API11)及以上的系统,使用ActionBar只需要设置两个地方即可

AndroidManifest.xml


    
    ...

以及


但是在平时的开发中,一般都要考虑APP的低版本适配问题,那么在Android3.0(API11)以下的的sdk中,该如何使用ActionBar呢?好在安卓为我们提供了支持包Android Support Library,该支持包可以通过Android SDK Manager下载

下载完成后在sdk安装路径下可以看到/extras/android/v7/appcompat这个项目,它就是低版本sdk使用ActionBar的支持包。(Andorid Support Library详细的使用说明请查看谷歌说明文档)。
安装完appcompat后,下面就是要在项目的代码中使用它了。
1.任何需要使用ActionBar的activity都要继承ActionBarActivity这个类

public class YourActivity extends ActionBarActivity {...}

2.activity(或者application)的主题都要继承Theme.AppCompat


3.APP版本兼容至(最低)Android2.1(API7)


    
    ...

至此,项目就已经使用ActionBar了,接下来就是如何定义ActionBar的功能按钮。
首先来看下一个标准的ActionBar长什么样

通过图片可以看出,一个ActionBar大致可以分成两部分,左侧的图标和Activity标签,右侧是一些可以自定义的功能按钮。其中修改左侧的图标和标签比较简单,只要在AndroidManifest.xml文件里修改即可。下面就来看看如何修改右侧的功能按钮,从而把我们想要的操作加到ActionBar上面。
1.在/res/menu文件夹里新建一个菜单定义文件,比如

/res/menu/main_activity_actions.xml


    
    
    
    

在上面的文件中,我们定义了一个搜索和一个设置共两个菜单项。在定义文件中,如果一个菜单项设置了android:icon属性,那么在ActionBar中就会显示该属性指向的drawable资源,如果android:icon属性没有被设置,那么默认就会显示android:title指向的字符串。对于android:showAsAction属性(该属性有五个可以设定的值——ifRoom,withText,never,always,collapseActionView,详细说明请戳这里),如果设置为ifRoom,那么系统在显示该菜单项时做个判断,判断ActionBar右侧是否有足够的空间放置这个按钮,如果设置为never,那么这里会因系统版本不同而导致显示的方式有所差异。在高版本系统(测试版本为4.3)中,ActionBar的最右侧会自动添加一个按钮overflow,也就是上面图片中竖排的三个点。通过点击overflow按钮,android:showAsAction属性设置为never的菜单项就会以下拉的方式显示出来。但在低版本系统(测试版本为2.2)中,系统是没有添加这个overflow按钮的。

所以项目中对低版本的适配需要注意到这一点

2.在Activity中调用onCreateOptionsMenu(Menu menu)方法解析menu文件

@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);
}

3.定义各个菜单项的动作

@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_settings:
            openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
ActionBar与Activities的树形结构

在微信5.2安卓客户端中,大家在使用时应该都注意到了一个特性,那就是不管当前活动界面是在哪个Activity上面,通过点击左上角的图标或者标签就可以返回到上一层的Activity。这一特性就是ActionBar带来的。那么如何实现呢?
1.在AndroidManifest.xml文件中声明Activity的android:parentActivityName属性


    ...
    
    
        ...
    
    
    
        
        
    

android:parentActivtyName属性声明的值就是点击ActionBar左侧图标所返回的Activity同时,为了支持4.0以下的版本需要多添加一些数据


    

2.在activity的onCreate(Bundle savedInstanceState)方法调用setDisplayHomeAsUpEnabled()方法

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // 如果不需要支持Android3.0(API11)以下的版本,则可以调用
    // getActionBar().setDisplayHomeAsUpEnabled(true);
}

通过ActionBar和Activities的树状结构相结合,APP内的Activities结合的更加紧密。其实这也是ActionBar的最大的魅力所在。对于开发者来说,至少可以省掉一个后退按钮。对于用户来说,实时的显示Activities标签可以帮助用户定位当前APP运行的位置,以及ActionBar这个UI框架普及后,用户的学习成本也会降低。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12056.html

相关文章

  • 安卓开发文档学习笔记实现ActionBar中Tab导航

    摘要:上篇文章说到如何在安卓项目中添加前文请戳这里,在添加完之后,就可以用它做一些更加有趣的事情了,比如这篇文章要说的导航。下面是代码和三张导航的效果图 上篇文章说到如何在安卓项目中添加ActionBar(前文请戳这里),在添加完ActionBar之后,就可以用它做一些更加有趣的事情了,比如这篇文章要说的Tab导航。 首先,上一张官方文档的Tab导航展示图showImg(http://se...

    JowayYoung 评论0 收藏0
  • 代码 - 收藏集 - 掘金

    摘要:行代码的人脸识别实践产品掘金前言很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上页的教程立马就放弃了。掘金最新最全的开源项目合集掘金是由整理并维护的安卓相关开源项目库集合。 安卓第三方登录之微信登录(图文详解) - Android - 掘金一、创建应用并成为开发者 1、创建应用 1)到微信开放平台管理中心,点击创建移动应用 ... 三步实现...

    neuSnail 评论0 收藏0
  • 安卓开发学习笔记(七):仿写腾讯QQ登录注册界面

    摘要:上面这一段代码主要是用到了活动的跳转,不然登录是登录不进去的这里因为我们直接使用了当中活动的跳转。点击登录就会立刻跳转到下一个界面进行登录,当然简介,是的直接子类。这些标签都需要类的支持,但是并不包括所有的标签。这段代码的关键主要是在我们的相对布局以及线性布局上面,我们首先在总体布局里设置为线性布局,然后再在里面设置为相对布局,这是一个十分常见的XML布局模式。 废话不多说,直接上代码:一....

    geekzhou 评论0 收藏0
  • 设计模式学习笔记适配器模式

    摘要:二适配器模式概念适配器模式是一种结构型模式,它的思想是将一个接口转化为另一个接口。适配器模式包含四个角色对象定义所需要的方法请求者负责使用对象定义的方法来做具体的处理被适配者以持有方法的角色适配器使用被适配者的方法来满足对象的需要。 一、结构型设计模式 1、概念结构型设计模式描述如何将类或者对象结合在一起形成更为复杂,功能更为强大的结构。 2、分类(1)类结构模型:这种结构模型关心类的...

    CompileYouth 评论0 收藏0
  • android基础知识- 收藏集 - 掘金

    摘要:靠谱的唯一设备号生成方案掘金应用开发中有时候也许会获取设备的唯一标识。首先去掉的位置,指定主题的属性图解掘金是中最常用的控件之一,而在使用时,必不可少的会使用到它的属性。省电的秘密之掘金是版本新引入的,,顾名思义,是用来调度工作。 靠谱的 Android 唯一设备号生成方案 - Android - 掘金应用开发中有时候也许会获取设备的唯一标识。Android 设备中获取唯一标识有多种方...

    Corwien 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<