[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),,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。