前言
操作栏是最重要的设计元素之中的一个,使用它来实现你的应用程序活动。通过提供多种用户界面功能, 使应用程序高速和其它的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
的主题了
Theme.AppCompat
“暗” 主题Theme.AppCompat.Light
“亮”主题Theme.AppCompat.Light.DarkActionBar
“亮”主题,可是有一个“暗”色调的操作栏。