7.5 Android界面新发展
随着移动通信的不断发展,多样化的移动设备开始涌现,比如:种类繁多的手机、各种尺寸的平板设备,等等。为了跟上设备变化的脚步,Android 3.0版本对界面框架进行了重构,开始支持平板设备,而从Android 4.0版本开始,Android将适合平板设备和手机的界面框架进行整合,使开发者能够方便地定制出适合不同尺寸设备的交互界面。
在Android 3.0以上版本的界面框架中,Android不仅重新定制了所有基本控件元素的样式,还在界面组件中新增了动作栏(Action Bar),用来整合界面的基本信息和导航功能;并添加了新的界面片段(Fragment),用来封装不同功能模块的交互界面,使不同的交互界面能够在不同尺寸设备上更好地适配和重用。
本节会介绍动作栏和界面片段的设计思想和使用方式,帮助开发者更好地理解Android界面框架变更,定制出符合新的Android界面设计思路的交互界面。
7.5.1 动作栏
在Android 3.0版本之前,开发者会使用标题栏(Title Bar)来显示界面的导航信息,使用选项卡控件来划分屏幕的功能区域,使用选项菜单来提供辅助功能的入口,整个交互界面显得凌乱且依赖硬件按键(如果没有硬件的菜单按键,选项菜单则无法弹出)。
而在Android 3.0版本之后,通过动作栏(Action Bar),Android将界面组件上的导航信息、功能区域选项信息、选项菜单信息等内容都整合在了一起,使得界面的导航和功能切换更为统一清晰,摆脱了硬件按键的束缚,更好地适应不同尺寸的界面需求(如图7-18所示)。
在Android 3.0以上版本的界面组件中,都会包含一个动作栏对象,可以通过调用Activity.getActionBar函数来进行获取,并读取或修改其设置和属性:
//获取动作栏对象
ActionBar actionBar=getActionBar();
//修改动作栏标题的图标和内容
actionBar.setLogo(R.drawable.my_logo);
actionBar.setTitle(R.string.my_title);
//显示或者隐藏标题栏
actionBar.hide();
actionBar.show();
…
图 7-18 动作栏的界面结构与老版本Android的界面结构比较
(①老版本Android的标签栏;②老版本Android的选项菜单;③新版本Android的标签栏,集中在动作栏上;④新版本Android的选项菜单,在动作栏上有快捷入口;⑤新版本Android的标题栏,集成在动作栏左侧;⑥动作栏上的自定义项)
整个动作栏包含几个区域,其中,选项菜单的入口和首选项都会在动作栏的右上角呈现,其定制和使用方式都没有变化,只是增加了首选菜单项的支持。开发者可以通过设置属性android:showAsAction,将部分常用且重要的菜单项直接放到动作栏上便于用户使用(在本书中,称这些菜单项为首选菜单项):
<?xml version="1.0"encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
…
android:showAsAction="ifRoom|withText"/>
</menu>
…
其中,ifRoom属性表示如果动作栏上有足够的空间,则把该菜单项显示在动作栏上,withText属性表示显示时需要带着文本信息。android:showAsAction除了支持ifRoom属性,还可以被设置成never,表示决不显示在动作栏上;也可以被设置成always,则表示无论如何,一定要在动作栏上显示出来。开发者通过该属性对菜单项进行配置,可以在最有限的空间里,显示最丰富的菜单选项,便于用户操作。
在动作栏上除了普通的选项菜单,还将标题栏图标也做成了菜单项,开发者可以监听其点击事件,实现导航菜单的功能:
@Override
public boolean onOptionsItemSelected(MenuItem item){
//响应菜单项点击事件
switch(item.getItemId()){
case android.R.id.home:
//点击标题栏的图标,实现导航功能,清空组件栈,回到起始组件
Intent intent=new Intent(this, StartActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
…
}
}
如果开发者觉得默认的动作栏结构无法满足需求,也可以通过给定的接口对动作栏样式进行重新定制,例如,调用ActionBar.setDisplayOptions函数,可以设置动作栏上各个控件是否显示以及显示效果。在很多应用中,都会有展示详情的需求,比如,在Android的邮件应用中,需要从邮件列表中打开某封邮件进行查看,此时,就可以通过ActionBar.setDisplayOptions设置不同的参数,将动作栏设置成为导航的模式,便于用户在看完邮件后快速返回列表中:
ActionBar actionBar=getActionBar();
actionBar.setDisplayOptions(
ActionBar.DISPLAY_SHOW_HOME|//显示导航图标
ActionBar.DISPLAY_HOME_AS_UP|//显示回退的标识箭头
ActionBar.DISPLAY_SHOW_TITLE);//显示标题信息
此外,开发者还可以通过ActionBar.setCustomView函数,在动作栏上添加自定义的控件,针对不同的界面组件特征,设置一些快速操作的入口:
ActionBar actionBar=getActionBar();
//设置显示自定义的动作栏控件
//通常会与蒙版值配合使用,避免干扰其他控制栏显示属性
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME,
ActionBar.DISPLAY_SHOW_CUSTOM|
ActionBar.DISPLAY_SHOW_HOME|
ActionBar.DISPLAY_SHOW_TITLE);//蒙版表示只影响这些属性
actionBar.setCustomView(CreateMyActionBarView());
总而言之,动作栏是Android为界面组件提供的快速入口。基于Android 3.0以上系统开发应用时,开发者应该充分利用动作栏,为用户提供摘要信息和一些常用操作的入口,比如导航、标签页、菜单项、搜索等[1]。
[1]关于动作栏的相关介绍,可以参见SDK文档:http://developer.android.com/guide/topics/ui/actionbar.html。