前言

操作栏是最重要的设计元素之中的一个,使用它来实现你的应用程序活动。通过提供多种用户界面功能, 使应用程序高速和其它的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 项目文件夹结构与用户界面的创建


加入操作button

能够在操作栏中加入图标, 文字这种操作button,来执行和当前环境相关的一些重要的动作。

当button无法全部显示或是不够重要时,也能够进行隐藏。


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

全部的操作button和其它的隐藏的溢出button都须要定义在菜单资源的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

下载, 下载后解压,

也能够到:

https://onedrive.live.com/redir?

resid=5B4EDBCD9EF1AB6B!196&authkey=!AIbWpolPJxRoRqQ&ithint=file%2c.zip


到 Android Design - Icons 20131120\Action Bar Icons\holo_dark\01_core_search文件夹下把下面的四个文件夹拷贝到 app 的res 文件夹。


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

假设空间足够的话, 就把这个button放在操作栏上; 否则放在overflow 隐藏。

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

从字面上非常easy就猜到是配置什么的。


2. 将操作button加入到操作栏.

这里就是改动 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. 操作button点击效果

改动 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 button一直在隐藏的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.


给低层的活动加入向上的button

当使用的是Android 4.1 (API 16)及以上的版本号的话, 仅仅须要简单配置就能够加入向上button, 点击它就能够回到上一级的页面了。

 在前面两篇中, 有介绍到怎样加入一个新的 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 的主题了







posted on 2017-04-21 11:18  lxjshuju  阅读(287)  评论(0编辑  收藏  举报