[Android系列—] 4. 添加操作栏(Action Bar)

前言

操作栏是最重要的设计元素之一,使用它来实现你的应用程序活动。通过提供多种用户界面功能, 使应用程序快速和其他的Andorid应用程序一致, 以便被用户熟悉和接受。 主要功能包括:

1. 标识你的应用程序,指示在应用程序的用户的位置。

2. 能很方便的操作重要的功能(像搜索功能)

3. 导航和视图切换功能(使用制表符或下拉列表)

类似的效果如下:

设置操作栏

在基本的使用状况是, 操作栏在左边显示活动的标题和应用的图标。

类似:

设置一个基本的操作栏需要你使用的应用活动主题支持操作栏, 这和具体的Android 的版本有关。

1.  Android 3.0 及以上版本支持

从 Android 3.0 (API Level 11)开始,使用 Theme.Holo (或是它的子类), 操作栏就包含在所有的活动中了; 当targetSdkVersion或者minSdkVersion这个值设置成 "11"或者更大的话, 默认就是使用这种主题(Theme)了.

具体的设置类似:

<manifest ... >
    <uses-sdk android:minSdkVersion="11" ... />
    ...
</manifest>

所以如果定义一个自己的主题, 需要使用操作栏的话, 就可以从 Theme.Holo 这个主题继承就可以了。

2.  Android 2.1 及以上版本的处理

如果使用的Android 版本低于 3.0的话, 如何处理呢?

这个时候就要在应用中导入安卓的支持库了。

这就是在前面介绍的为什么在建立Android项目的时候会多出一个  appcompat_v7 的原因了。 这就是需要导入的库。

具体的步骤有

1. 更新 activity 使之继承 ActionBarActivity

public class MainActivity extends ActionBarActivity { ... }

2. 在清单文件中, 更新 <application>或某个<activity>元素, 使之使用 Theme.AppCompat 主题, 类似

<activity android:theme="@style/Theme.AppCompat.Light" ... >

最后, 设置应用的API 层级

<manifest ... >
    <uses-sdk android:minSdkVersion="7"  android:targetSdkVersion="18" />
    ...
</manifest>

前面介绍的例子, 默认创建的应用,效果就是如此:

[Android系列—] 2. Android 项目目录结构与用户界面的创建

添加操作按钮

可以在操作栏中添加图标, 文字这样的操作按钮,来执行和当前环境相关的一些重要的动作。

当按钮无法全部显示或是不够重要时,也可以进行隐藏。

1. 在XML 中配置操作(Actions)

所有的操作按钮和其他的隐藏的溢出按钮都需要定义在菜单资源的XML文件中。

在 res/menu 目录下添加一个 main_activity_actions.xml(此目录已经有的main.xml不去管它),内容如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

说明:

1)  action_search 这个是需要在  strings.xml 中添加的(上一篇介绍过)

2)   @drawable/ic_action_search

ic_action_search 是图标的名字。

相关的图标可以先到 :

http://commondatastorage.googleapis.com/androiddevelopers/design/Android_Design_Icons_20131106.zip

下载, 下载后解压,

到 Android Design - Icons 20131120\Action Bar Icons\holo_dark\01_core_search目录下把以下的四个文件夹复制到 app 的res 目录。

3)  showAsAction="ifRoom" 的作用是:

如果空间足够的话, 就把这个按钮放在操作栏上; 否则放在overflow 隐藏。

showAsAction还有其他配置 如: always ; ifRoom|withText

从字面上很容易就猜到是配置什么的。

2. 将操作按钮添加到操作栏.

这里就是修改 MainActivity 的 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);
}

3. 操作按钮点击效果

修改 MainActivity 的onOptionsItemSelected() 的方法

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        /*int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);*/

    	switch(item.getItemId()){
    		case R.id.action_search:
    			//openSearch();
    			return true;
    		case R.id.action_settings:
    			//openSettings();
    			return true;
    		default:
    			return super.onOptionsItemSelected(item);
    	}

    }

这里暂且不关注点击后的实际效果。

好了, 基本上完成了。

重新运行看看。

发现, Action 按钮一直在隐藏的Overflow 中, 没有出现在操作栏上

Actions Item 不显示在Action Bar 上

如果应用使用支持包的话, "android: “ 的命名空间是没有showAsAction这个属性的。

替代方式是:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="ifRoom"  />
    ...
</menu>

yourapp -  这个是可以根据自己的需要来命名。只要在menu 定义了, 在Item 里使用了即可。

再次运行, 一切ok.


给低层的活动添加向上的按钮

当使用的是Android 4.1 (API 16)及以上的版本的话, 只需要简单配置就可以添加向上按钮, 点击它就可以回到上一级的页面了。

在前面两篇中, 有介绍到如何添加一个新的 activity

[Android系列—] 2. Android 项目目录结构与用户界面的创建

[Android系列—] 3. 启动另外的活动(Activity)

这里直接修改 DisplayMessageActivity 的 onCreate 方法, 修改后结果如下:

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_display_message);

		getSupportActionBar().setDisplayHomeAsUpEnabled(true);
		// If your minSdkVersion is 11 or higher, instead use:
	    // getActionBar().setDisplayHomeAsUpEnabled(true);

		/*if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}*/
	}

其他部分无需更改。

执行后效果如下:

给操作栏添加样式

Android 包含了集中内置的主题, 像 “暗色”或"亮色"的操作栏风格, 同样可以通过扩展这些主题来客制自己需要的操作栏风格。

需要注意的是: 如果使用的是支持库的API来创建的操作栏, 需要使用或重写 Theme.AppCompat, 而不是Theme.Holo(在API 11 或更高版本提供)。 这样的话, 在定义样式属性的时候就要定义两次了, 一个是平台的样式属性, 一次是支持库的样式属性。

1. 使用Android 的主题

安卓提供了两种基本的活动主题:

1) Theme.Holo   -- “暗”主题

2)  Theme.Holo.Light  -- “亮”主题

使用方式很简单, 就是设置 <application> 元素的android:theme的值, 或是设置各个<activity> 的 android:theme的值

<application android:theme="@android:style/Theme.Holo.Light" ... />

还可以整体使用深色调,而对操作栏使用  Theme.Holo.Light.DarkActionBar  来定义使用深色调。

如果是使用支持可的话, 就要使用 Theme.AppCompat 的主题了

[Android系列—] 4. 添加操作栏(Action Bar),布布扣,bubuko.com

时间: 2024-10-13 05:17:43

[Android系列—] 4. 添加操作栏(Action Bar)的相关文章

【Android界面实现】Styling the Action Bar

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本篇文章翻译自Android开发者网站,但并不是完全按照原意翻译,添加了我个人的一些理解.想看原文的请戳:http://developer.android.com/training/basics/actionbar/styling.html ActionBar控件,可以为我们的App提供一致的导航体验,用户使用起来更加的方便和熟悉,降低用户的学习成本,但是这并不意味着我们要和其他的App使用完全一样的Ac

【Android界面实现】Overlaying the Action Bar

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本篇文章翻译自http://developer.android.com/training/basics/actionbar/overlaying.html,想查看原文的同学可以自己翻墙看. 默认的,ActionBar会出现在你的Activity的窗口上面,这样可能会减少剩下的Activity的可见区域的大小.如果,在用户的交互的过程中,你想要隐藏或者是展示ActionBar,你可以通过hide()或者是s

Android 创建项目ActionBar(操作栏)不显示的问题

昨晚在新建一个项目的时候,发现想创建一个带操作栏的项目,无论我怎么调,就是创建不出来. 在创建工程的时候选择了 但是打开运行还是没有操作栏 但是看了看其他的项目,AndroidManifest.xml文件以及styles.xml文件以及其他布局文件代码都是一样的,为什么其他的项目能显示呢? 查了好长时间都没有解决.最后在书中找到了答案. 又是一个版本兼容的问题(最近遇到了N多类似问题),操作栏组件是在 Android 3.0 (API 11)中被引入的,它是一个导航面板,代替了每个Activit

【Android文档】Training-------Adding the Action Bar

转载请注明出处 :http://blog.csdn.net/chziroy/article/details/44171197 本文主要翻译android开发官网Training中关于ActionBar的几篇文章 Setting up the Action Bar 在大多最基本的格式中,action bar都会呈现activity的标题以及在左侧呈现app的图标.它能使用户知道当前处于哪个activity,并且使该app有一个持久的标志.如下图 要使用action bar需要app的activit

活动栏—Action Bar

活动栏(ActionBar)是Android 3.0之后增加的新组件.它用于替代传统的标题栏.它提供的主要功能包括以下几个. (1)直接显示选项菜单. (2)可添加交互视图到活动栏作为活动视图(Action View). (3)用程序的图标作为返回Home或者向上的导航操作. (4)提供标签导航功能. (5)提供下拉导航功能. 下面通过一个例子具体演示活动栏前3个功能的基本用法. 通过选项菜单资源文件actionitem.xml我们定义活动栏上的选项菜单和活动视图,而程序图标的单击响应也是作为一

Android中文翻译 - Adding the Action Bar 添加活动栏(action bar)

2014-10-28 张云飞VIR 翻译自:https://developer.android.com/training/basics/actionbar/index.html 添加活动栏(Adding the Action Bar) 译者注:我找不到更好的词汇翻译action bar,虽然我也认为 活动栏 不是个好的翻译,但总要有个中文名字.不过为了方便识别,本文仍继续使用英文的actionbar 活动栏action bar 是非常重要的设计元素之一,你可以为你的app中的activity来实

Android设计和开发系列第二篇:Action Bar(Develop—API Guides)

Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an icon Adding Action Items Handling clicks on action items Using split action bar Navigating Up with the App Icon Adding an Action View Handling collap

Android UI开发第二十四篇——Action Bar

Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观.你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中. Action bar的主要目的是: 1.  提供一个用于识别应用

Android之Action Bar

Action Bar在实际应用中,很好地为用户提供了导航,窗口位置标识,操作点击等功能.它出现于Android3.0(API 11)之后的版本中,在2.1之后的版本中也可以使用. 添加与隐藏Action Bar 在3.0之后的版本中(android:minSdkVersion 或者 android:targetSdkVersion 属性被设置成11或者更高),默认在activity中添加了Action Bar,不用额外添加.如果不想在activity中使用Action Bar,我们可以通过设定a