`
huaxin803
  • 浏览: 113280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 用户界面---操作栏(Action Bar 二)

 
阅读更多
选择操作项

通过评估一些关键的特性,你应该仔细的选择选项菜单中的那些菜单项应该作为操作项来显示,通常,每个操作项应该至少满足下列特性之一:

1.经常使用:用户百分之七十以上的访问都需要使用的操作,或者是要连续的多次使用的操作。

2.重要:它是一个用户能够很容易找到的操作,即使它不是经常性的操作,也需要用户在需要的时候能够轻易的找到它,并执行。

如,Wi-Fi设置中的添加网络等。

3.典型:它是一些类似应用程序的操作栏中提供的典型操作,因此,用户都期望在操作栏中能够找到它。

如,电子邮件或社交应用程序中的“刷新”操作。

如果你想要把四个以上的菜单项调整为操作项,那么你就应该认真考虑一下他们相对的重要性级别,并且尝试不要超过四个以上的操作项设置(并且还有使用“ifRoom”属性值的设置,允许系统在遇到空间受限的比较小的屏幕的时候,能够把靠后的操作项放到溢出菜单中)。即使在一些宽屏设备上,空间充足,你也不应该创建很多操作项,这样会扰乱UI的布局,而且更像一个桌面工具栏,因此要保持最小数量的操作项。

另外,以下操作应该永远不要作为操作项来显示:设置、帮助、意见反馈、或类似的操作。要把它们始终保留在溢出菜单中。

注意:不是所有的设备都给检索提供了专有的硬件按钮,因此,如果是你应用程序中的一个重要功能,它应该始终作为一个操作项来显示(而且通常要把放到第一项的位置,尤其是操作窗口中提供这个操作的时候)。

使用分离式操作栏

当你的应用程序正在Android4.0(API 级别 14)或以上的版本上运行,那么还有一种叫做“分隔操作栏”的额外模式对操作栏有效。当你启用分隔操作栏模式时,在屏幕的底部会显示一个独立的横条,用于显示Activity在窄屏设备(如竖屏手机)上运行时的所有操作项。

把操作栏分隔成独立的操作项,确保在窄屏设备上有合适的空间来显示所有的操作项,同时把导航条和标题元素留在顶部。

要启用分离式操作栏,只需简单的在<application>或<activity>元素中添加uiOptions=”splitActionBarWhenNarrow”属性设置就可以了。

要注意,Android会基于当前屏幕的尺寸用各种方式来调整操作栏的外观。使用分离式操作栏只是你能够启用的允许操作栏针对不同屏幕尺寸来进一步优化用户体验的选项之一。你还可以允许操作栏把导航选项标签折叠到主操作栏中,如果你在操作栏中使用导航选项标签,那么一旦操作项在窄屏设备上被分离,这些导航选项标签就可能填充到主操作栏中,而不是被分离到堆叠起来的操作栏。尤其是如果你禁用了操作栏的图标和标题(用setDisplayShowHomeEnabled(false)和setDisplayShowTitleEnabled(false)方法),那么导航选项标签就会折叠到主操作栏中,如下图3中第二个设备的显示:

pic

图3. 左侧是带有导航选项标签的分离式操作栏,右侧是禁用了应用图标和标题的分离式操作栏。

注意:尽管android:uiOptions属性在Android4.0(API 级别 14)中才被添加,但是为了保持跟Android的低版本的兼容性,即使你的minSdkVersion属性值小于14,那么你的应用程序也可以安全的包含android:uiOptions属性。在旧版本上运行时,因为系统不能理解这个属性,所以只是简单的忽略了这个XML属性。在你的清单文件中包含这个属性的唯一条件是,你必须在支持API级别14或更高以上版本的平台上编译你的应用程序。为了保持兼容性,你不能在你的应用程序代码中使用由minSdkVersion属性声明的版本所不支持的API,只有XML属性才能被旧的平台版本安全的忽略。

使用应用程序图标来导航

默认情况下,应用程序图标显示在操作栏的左边。你能够把这个图标当做操作项来使用。应用程序应该在这个图标上响应以下两个操作之一:

1.返回应用程序的“主”Activity;

2.向应用程序上级页面导航。

当用户触摸这个图标时,系统会调用Activity带有android.R.id.home ID的onOptionsItemSelected()方法。在这个响应中,你既可以启动主Activity,也可以返回你的应用程序结构化层次中用户上一步操作的界面。

如果你要通过应用程序图标的响应来返回主Activity,那么就应该在Itent对象中包括FLAG_ACTIVITY_CLEAR_TOP标识。用这个标记,如果你要启动的Activity在当前任务中已经存在,那么,堆栈中这个Activity之上的所有的Activity都有被销毁,并且把这个Activity显示给用户。添加这个标识往往是重要的,因为返回主Activity相当与一个回退的动作,因此通常不应该再创建一个新的主Activity的实例,否则,最终可能会在当前任务中产生一个很长的拥有多个主Activity的堆栈。

例如,下例的onOptionsItemSelected()方法实现了返回应用程序的主Activity的操作:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

在用户从另一个应用程序进入当前Activity的情况下,你可能还想要添加FLAG_ACTIVITY_NEW_TASK标识。这个标识确保在用户返回主页或上级页面时,新的Activity不会被添加到当前的任务中,而是在属于你自己的应用程序的任务中启动。例如,如果用户通过被另一个应用程序调用的Intent对象启动了你的应用程序中的一个Activity,那么选择操作栏图标来返回主页或上级页面时,FLAG_ACTIVITY_CLEAR_TOP标识会在属于你的应用程序的任务中启动这个Activity(不是当前任务)。系统既可以用这个新的Activity做根Activity来启动一个新的任务,也可以把存在后台的拥有这个Activity实例的一个既存任务带到前台来,并且目标Activity会接受onNewIntent()回调。因此,如果你的Activity要接收另一个应用程序的Intent对象,那么通常应该给这个Intent对象添加FLAG_ACTIVITY_NEW_TASK标识,如:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

注意:如果你要使用应用图标来返回主页,要注意从Android4.0(API 级别 14)开始,必须通过调用setHomeButtonEnabled(true)方法确保这个图标能够作为一个操作项(在以前的版本,默认情况下,这个图标就能够作为一个操作项)。

向应用程序上级页面导航

作为传统的回退导航(把用户带回任务历史中的前一个窗口)的补充,你能够让操作栏图标提供向上级页面导航的功能,它应用把用户带回到你的应用程序的上级页面。例如,当前页面时你的应用程序层次比较深的一个页面,触摸应用程序图标应该返回返回上一级页面(当前页面的父页面)。

pic

图4. Email应用程序的标准图标(左)和向上导航图标(右)。系统会自动添加向上指示。

例如,图5演示了当用户从一个应用程序导航到一个属于不同应用程序的Activity时,“回退”按钮的行为。

pic

图5. 在从People(或Contacts)应用程序进入Email应用程序之后,回退按钮的行为。

但是,如果在编辑完邮件之后,想要停留在Email应用程序中,那么向上导航就允许你把用户导航到Email应用程序中编辑邮件页面的上级页面,而不是返回到前一个Activity。图6演示了这种场景,在这个场景中,用户进入到Email应用程序后,不是按回退按钮,而是按操作栏图标来向上导航。

pic

图6. 从People应用进入Email应用后,向上导航的行为。

要是应用程序图标能够向上导航,就要在你的ActionBar中调用SetDisplayHomeAsUpEnabledtrue(true)方法。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    ...
}

当用户触摸这个图标时,系统会调用带有android.R.id.home ID的onOptionsItemSelected()方法。

请记住要在Intent对象中使用FLAG_ACTIVITY_CLEAR_TOP标识,以便你不会这个父Activity存在的情况下,再创建一个新的实例。例如,如果你不使用FLAG_ACTIVITY_CLEAR_TOP标识,那么向上导航后,再按回退按钮,实际上会把用户带到应用程序的下级页面,这是很奇怪的。

注意:如果有很多用户能够到达应用程序中当前Activity的路径,那么,向上图标应该沿着当前Activity的实际启动路径逐步的向会导航。

分享到:
评论
Global site tag (gtag.js) - Google Analytics