前言
操作栏是最重要的设计元素之一,使用它来实现你的应用程序活动。通过提供多种用户界面功能, 使应用程序快速和其他的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
的主题了
Theme.AppCompat
“暗” 主题Theme.AppCompat.Light
“亮”主题Theme.AppCompat.Light.DarkActionBar
“亮”主题,但是有一个“暗”色调的操作栏。
[Android系列—] 4. 添加操作栏(Action Bar),布布扣,bubuko.com