标签:android 应用
活动条(ActionBar)是Android3.0的重要更新之一,ActionBar位于传统标题的位置,其主要提供了如下功能:
>显示选项菜单的菜单项,即激昂菜单项显示在Action Item;
>使用程序图标作为返回Home主屏或向上的导航操作;
>提供交互式View作为Action View;
>提供基于Tab的导航方式,可用于切换多个Fragment
>提供基于下拉的导航方式
1.启用/关闭ActionBar
Android3.0及以上版本已经默认启用了ActionBar,只需要在AndroidManifest.xml文件的SDK配置指定Android版本高于11就会默认启用ActionBar,代码如下:
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
在实际项目中,通常推荐使用代码来控制ActionBar的显示、隐藏,代码实现如下:
ActionBar actionBar = getActionBar(); //返回ActionBar实例
actionBar.show(); //显示
actionBar.hide(); //隐藏
当然,只有当应用主题没有关闭ActionBar时才能返回ActionBar实例。如果设置应用主题或Activity的主题属性Android:name="@android:style/Theme.Holo.NoActionBar",则关闭ActionBar活动条功能。
注意:在使用ActionBar过程中,明明我们将Android的SDK版本设置大于3.0,但是仍不能实现在标题栏显示ActionBar或者getActionBar()返回的null。这是由于Android应用的主题的错误,有两种方法:
(1)在新建项目时,设置Android版本高于3.0
(2)删除AndroidManifest.xml清单文件<Application.../>元素中的Android:theme属性,然后在Activity代码中添加getWindow().requestFeature(Window.FEATURE_ACTION_BAR);即可。
2.使用ActionBar显示选项菜单
由于有些手机不存在MENU按键,Android提供了ActionBar将选项菜单显示成Action Item。从Android 3.0开始,MenuItem新增如下方法用于将菜单选项显示在ActionBar上作为ActionItem。ActionBar还可以根据应用程序当前的功能来提供与其相关的Action按钮,这些按钮都会以图标或文字的形式直接显示在ActionBar上。当然,如果按钮过多,ActionBar上显示不完,多出的一些按钮可以隐藏在overflow里面(最右边的三个点就是overflow按钮),点击一下overflow按钮就可以看到全部的Action按钮了。 当Activity启动的时候,系统会调用Activity的onCreateOptionsMenu()方法来取出所有的Action按钮,我们只需要在这个方法中去加载一个menu资源(menu/*.xml),并把所有的Action按钮都定义在资源文件里面就可以了。
setShowAsAction(int actionEnum)
该方法设置是否将该菜单显示在ActionBar上,作为ActionItem。其中,actionEnum方法支持如下参数值:
>SHOW_AS_ACTION_ALWAYS:总是将该MenuItem显示在ActionBar上;
>SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该Action View折叠成普通菜单项
>SHOW_AS_ACTION_IF_ROOM:当ActionBar位置足够时才显示MenuItem
>SHOW_AS_ACTION_NEVER:不将该MenuItem显示在ActionBar上
>SHOW_AS_ACTION_WITH_TEXT:将该MenuItem显示在ActionBar上,并显示菜单项的文本
然后,在实际项目中我们推荐使用XML资源文件来定义菜单,因为,我们可以直接在菜单资源文件中的<item.../>元素指定如下属性即可:
<item android:title="菜单项名称"
android:icon="菜单项标题"
android:showAsAction="always|withText"
//总是将菜单项显示在ActionBar上并显示菜单项的文本
......./>
>setDisplayHomeAsUpEnabled(boolean showHomeAsUp):设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头;
>setDisplayOptions(int options):通过传入int类型变量来控制该ActionBar的显示选项;
>setDisplayShowHomeEnabled(boolean showHome):设置是否显示应用程序的图标;
>setHomeButtonEnabled(boolean enabled):设置是否将应用程序图标转换变成可点击的按钮;
源码实战:
功能:将该Activity的程序图标转变成可点击的图标,并控制用于单击该图标时返回程序的主Activity.
package com.example.actionbar;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
/**
* 项目名称/版本号:Actionbar/v1.0
* 包 名:com.example.actionbar
* 类描述:启用程序图标导航.点击应用程序图标,返回主界面
* 创建人:jiangdongguo
* 创建时间:2015-6-12 下午8:20:14
* 博客地址:http://blog.csdn.net/u012637501
*/
public class ActionHome extends Activity {
private ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//a.获得ActionBar实例
actionBar = getActionBar();
//b.设置是否显示应用程序图标
actionBar.setDisplayShowHomeEnabled(true);
//c.设置是否将应用程序图标转换变成可点击的按钮
actionBar.setHomeButtonEnabled(true);
//d.将应用程序图标设置为可点击的按钮并在图标上添加向左箭头
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
return super.onCreateOptionsMenu(menu);
}
/**
*选项菜单的菜单项被单击后的回调方法
* */
public boolean onOptionsItemSelected(MenuItem item) {
//判断菜单项是否能被点击,是则使能菜单项
if(item.isChecked()){
item.setChecked(true);
}
//判断单击的是哪个菜单项,并作出相应的响应
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(ActionHome.this,MainActivity.class);
startActivity(intent);
this.finish();
break;
default:
break;
}
return true;
}
}
效果演示:
4.使用View作为Action View
ActionBar上除了可以显示普通的Action Item之外,还可以显示普通的UI组件(widget)作为一个功能按钮的替代。操作视图提供了快速访问行为而不改变活动或片段,且没有替换动作栏。例如,如果你想实现搜索动作,可以在action
bar中嵌入一个SearchView窗口部件。为了实现一个action view到动作栏中,我们可以使用actionLayout or actionViewClass属性来指定一个布局(xml)资源或者窗口部件widget到Action
Bar.具体操作:
>定义Action Item时,使用android:actionViewClass属性指定Action View的实现类(widget);
>定义Action Item时,使用android:actionLayout属性指定Action View对应的视图(layout);
(1)菜单资源res/menu/menu.xml
在菜单资源中定义Action Item,但这Action Item使用的是Action View而不是不同的Action Item。
- <?xml version="1.0" encoding="utf-8"?>
-
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Action Item为widget-->
-
<item
- android:id="@+id/search"
-
android:title="搜索"
- android:orderInCategory="100"
-
android:showAsAction="ifRoom|collapseActionView"
- android:actionViewClass="android.widget.SearchView"/>
-
- <!-- Action Item为视图资源-->
-
<item
- android:id="@+id/clock"
-
android:title="模拟时钟"
- android:orderInCategory="100"
-
android:showAsAction="ifRoom|collapseActionView"
- android:actionLayout="@layout/clock"/>
-
</menu>
其中,clock视图实现代码如下/res/layout/clock.xml:
<?xml version="1.0" encoding="utf-8"?>
<AnalogClock
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
(2)为Action View添加事件监听器
Action视图的事件监听主要在onCreateOptionsMenu()方法中实现,通过调用MenuItemCompat.getActionView并传递相应的菜单项(MenuItem)来获取Action视图对象。
- public boolean onCreateOptionsMenu(Menu menu) {
-
getMenuInflater().inflate(R.menu.menu, menu); //加载菜单资源
- MenuItem searchItem = menu.findItem(R.id.search);
//获得MenuItem对象
-
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); //获得Action视图对象
- // Configure the search info and add any event listeners //为Action视图对象注册事件监听器
-
...
- return super.onCreateOptionsMenu(menu);
-
}
(3)效果如下
注:android:showAsAction="collapseActionView"
属性值表示该空间可以被合并成一个Action按钮。
Android活动条(actionbar)使用详解(一)
标签:android 应用
原文地址:http://blog.csdn.net/u012637501/article/details/46475399