频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
Android API Guides---Action Bar
2017-04-19 15:52:00         来源:毅之忆的博客  
收藏   我要投稿

Action Bar

操作栏是一个窗口功能,可识别用户的位置,并提供用户操作和导航模式。使用操作栏,您的用户在不同应用程序熟悉的界面,该系统正常适应不同的屏幕配置。

\

图1.一个操作栏,其中包括[1]应用程序图标,[2]两项行动项目,和[3]操作溢出。

操作栏提供了几个关键功能:

提供了应用程序给你的应用的身份,并表示用户位置的专用空间。

使重要行动显明易在可预见的方式(如搜索)。

支持应用内一致的导航和查看开关(带标签或下拉列表)。

有关操作栏中的互动模式和设计准则的详细信息,请参阅操作栏的设计指南。

Android 3.0的(API级别11)首先添加的动作条的API,但他们也可以在支持图书馆与Android 2.1(API 7级)及以上的兼容性。

本指南重点介绍如何使用支持库行动起来吧,但如果您的应用程序仅支持的Andr??oid 3.0或更高版本,您应在框架使用的ActionBar的API。大部分的API都是相同的,但居住在不同的包命名空间有几个例外到在下面的章节提到的方法名称或签名。

注意:务必从相应的包导入动作条类(及相关API):

如果低于11支持API级别:

import android.support.v7.app.ActionBar

如果只支持API级别11和更高版本:

import android.app.ActionBar

注意:如果你正在寻找关于上下文显示行动项目上下文操作栏的信息,请参阅菜单指南。

添加操作栏

如上所述,本指南重点介绍如何在支持库使用的ActionBar的API。所以,如果你可以添加操作栏,则必须按照在支持库设置的指示成立了以应用程序兼容性V7支持库项目。

一旦你的项目设置与支持库,这里是如何添加操作栏:

通过扩展ActionBarActivity创建活动。

使用(或扩展)的Theme.AppCompat主题,为您的活动之一。 例如:

现在,你的活动在Android2.1(API7级)以上运行时,包括操作栏。

在API级别11或更高版本

操作栏包含在使用Theme.Holo主题(或者它的后代之一),这是默认的主题时,无论是targetSdkVersion VS的minSdkVersion属性被设置为“11”或更高的所有活动。如果你不想为活动的操作栏,设置活动主题Theme.Holo.NoActionBar。

拆除行动起来吧

你可以通过调用隐藏隐藏在运行时操作栏中的()。 例如:

ActionBar actionBar = getSupportActionBar();

actionBar.hide();

在API级别11或更高版本

获取与getActionBar()方法的动作条。

当操作栏隐藏,系统会调整您的布局,填补了屏幕空间现在可用。您可以通过拨打节目带来的操作栏回()。

要注意的是隐藏和删除操作栏使你的活动重新布局,以考虑通过操作栏占用的空间。如果你的活动往往隐藏和显示操作栏,您可能希望启用覆盖模式。覆盖模式吸引你的活动布局前面的操作栏,模糊的顶部。这样一来,你的布局操作栏隐藏和重新出现时保持固定。要启用覆盖模式,为您的活动自定义主题,并设置windowActionBarOverlay为true。欲了解更多信息,请参见下面的章节关于样式化操作栏。

使用标志代替图标

默认情况下,系统使用操作栏中的应用程序图标,通过在<应用>或<活动>元素的图标属性指定。但是,如果您还指定标识属性,那么操作栏使用的标志图片代替图标。

一个logo通常应比图标宽,但不应该包括不必要的文字。您通常应该使用一个标志,只有当它代表你的品牌在用户认识到传统的格式。一个很好的例子是YouTube应用的标志,徽标代表了预期的用户品牌,而应用程序的图标是一个修改后的版本符合的启动器图标方的要求。

添加行动项目

\

图2.操作栏有三个操作按钮和溢出按钮。

操作栏为用户提供了访问与应用程序的当前环境中最重要的行动项目。那些带图标和/或文本直接出现在动作条被称为操作按钮。无法容纳在操作栏或不足够重要操作都隐藏在行动溢出。用户可以通过按压右侧的溢出按钮(或装置菜单按钮,如果有的话)揭示的其他动作的列表。

当你的活动启动时,系统通过调用您的活动的onCreateOptionsMenu()方法填充的行动项目。使用此方法可充气定义的所有操作项目??菜单资源。例如,这里有一个菜单资源定义了几个菜单项:

res/menu/main_activity_actions.xml

然后在你的活动onCreateOptionsMenu()方法,填充菜单资源到给定的菜单到每个项目添加到操作栏:

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

}

要申请一个项目操作栏中的操作按钮直接显示,包括在标签showAsAction=“ifRoom”。 例如:

...

如果没有足够的空间,在操作栏中的项目,它会出现在动作溢出。

使用XML的支持库属性

请注意,上述showAsAction属性使用在

标签定义自定义命名空间。使用由支持库定义的任何XML属性的时候,因为在旧设备上的Android框架不存在这些属性,这是必要的。所以,你必须使用自己的名称空间作为由支持库中定义的所有属性的前缀。

如果你的菜单项,同时提供了一个标题和图标的标题和图标属性,那么行动项目仅显示默认的图标。如果你想显示的文字标题,添加“withText”到showAsAction属性。 例如:

注:“withText”值是一个提示文本标题应该出现在动作条。可能的情况下操作栏将显示标题,但可能不会,如果一个图标可用并且操作栏被约束的空间。

你应该总是定义标题为每个项目,即使你不申报的标题出现在操作项,原因如下:

如果没有足够的空间在操作项操作栏,菜单项出现在只有标题出现的溢出。

屏幕阅读器的视障用户阅读菜单项的标题。

如果操作的项目出现,只有图标,用户可以长按来揭示一个工具提示,显示操作标题的项目。

图标是可选的,但建议。对于图标设计建议,请参阅意象设计指南。您也可以下载一组从下载页面标准动作栏图标(如搜索或放弃)。

您还可以使用“总是”,宣布一个项目总是显示为一个操作按钮。但是,你不应该强迫一个项目以这种方式出现在动作条。这样做可以创建一个窄屏幕的设备布局问题。这是最好的,而不是用“ifRoom”来要求一个项目出现在动作条,但允许系统将其移动到溢出时,有没有足够的空间。然而,这可能是必要的,如果该项目包括不能被折叠,并且必须始终可见以提供进入一个关键特征的动作,以使用此值。

搬运行动项目点击

当用户按下一个动作时,系统调用您的活动的onOptionsItemSelected()方法。使用菜单项通过这种方法,可以通过调用getItemId标识操作()。这将返回由<项目>提供的唯一的ID标签的id属性,因此您可以执行相应的操作。例如:

@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_compose:

composeMessage();

return true;

default:

return super.onOptionsItemSelected(item);

}

}

注意:如果从一个片段膨胀的菜单项,通过碎片类的onCreateOptionsMenu()回调,系统调用onOptionsItemSelected()为片段,当用户选择这些项目中的一个。然而,活动都有机会第一处理该事件,因此,系统首先在活动呼叫onOptionsItemSelected(),要求该片段在同一回调之前。为了确保在活动的任何片段也有机会来处理回调,总是调用传递给超类的默认行为,而不是返回false时,你不处理的项目。

\

图3.实体模型显示制表符(左)的操作栏,然后拆分操作栏(中);与应用程序图标和标题禁用(右)。

使用拆分操作栏

拆分操作栏在屏幕的底部提供了一个独立的酒吧时显示活动的窄屏幕(如面向肖象的手机)上运行的所有行动项目。

分离行动项目这种方式保证了空间的合理数量可显示一个狭窄的屏幕上你所有的行动项目,同时留出空间在顶部导航和标题元素。

要使用支持库时启用拆分行动起来吧,你必须做两件事情:

添加uiOptions=“splitActionBarWhenNarrow”每个<活动>元素或元素。此属性是API14级及更高版本(它是由旧版本忽略)只听懂。

为了支持旧版本中,添加<元数据>元素每个<活动>元素声明了“android.support.UI OPTIONS”同等价值的一个孩子。

例如:

采用分体式操作栏也可以让导航选项卡崩溃到主操作栏,如果你删除的图标和标题(如图3所示右侧)。要产生这种效果,禁用操作栏图标和标题与setDisplayShowHomeEnabled(假)和setDisplayShowTitleEnabled(假)。

导航与应用程序图标

设计指南

导航与返回和向上

\

图4.在Gmail向上按钮。

启用应用程序图标为一个向上按钮允许用户根据屏幕之间的层次关系来浏览你的应用程序。例如,如果画面A显示的项目的列表,并选择项目导致屏幕B,则画面B应该包括向上按钮,返回到屏幕A.

注意:向上导航是从系统返回按钮提供的后退导航不同。后退按钮是用来通过屏幕上的用户最近使用过的历史以时间倒序浏览。它通常是基于屏幕之间的时间关系,而不是应用程序的分层结构(其是基础向上导航)。

为了使应用程序图标为一个向上按钮,呼叫setDisplayHomeAsUpEnabled()。例如

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_details);

ActionBar actionBar = getSupportActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

...

}

现在,在操作栏中的图标出现在向上插入符号(如图4所示)。然而,它不会做默认任何事情。指定活动在用户按下向上按钮打开,你有两个选择:

指定清单文件中的父活动。

这是最好的选择,当父活动总是相同的。通过在其活性父舱单申报,操作栏会自动执行,当用户按下向上按钮正确的行动。

在搭载Android 4.1(API级别16)开始,您可以在<活动>元素parentActivityName属性声明父。

为了支持支持库旧设备,还包括一个<元数据>元素指定为android.support.PARENT_ACTIVITY值父活动。 例如:

...

...

一旦父活动在这样的清单中指定并启用与setDisplayHomeAsUpEnabled(向上按钮),你的工作就完成了,并在操作栏中正确导航了。

或者,在你的活动覆盖getSupportParentActivityIntent()和onCreateSupportNavigateUpTaskStack()。

这是在适当的时候根据用户如何到达当前屏幕中的父活动可以是不同的。也就是说,如果有用户可以采取到达当前屏幕许多路径,向上按钮应沿着路径用户实际跟随到那里向后导航。

系统调用getSupportParentActivityIntent()当用户按下向上按钮在导航您的应用程序(在应用自己的任务范围内)。如果这应该打开在了导航的活动的不同取决于用户如何到达当前位置,那么你应该重写此方法以返回启动相应的父活动的意图。

系统调用onCreateSupportNavigateUpTaskStack()为您的活动,当用户在你的活动是不属于你的应用程序正在运行的任务按下向上按钮。因此,你必须使用TaskStackBuilder传递给此方法来构造,当用户浏览了应合成相应的回堆栈。

即使你覆盖getSupportParentActivityIntent()当用户浏览您的应用程序指定最多的导航,你可以不用通过如上图所示,宣布在清单文件中“默认”父活动来实现onCreateSupportNavigateUpTaskStack()。然后onCreateSupportNavigateUpTaskStack()的默认实现将综合基于清单中声明父活动一回堆栈。

注意:如果您已经使用了一系列的片段而不是多个活动建立你的应用程序的层次结构,那么上述两个选项将工作。相反,通过您的片段向上导航,覆盖onSupportNavigateUp()被从后面堆栈弹出当前片段致电popBackStack交易通常执行适当的片段()。

有关实现向上导航的更多信息,请阅读提供高达导航。

点击复制链接 与好友分享!回本站首页
上一篇:Android API Guides---Layouts
下一篇:Android日志Log
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站