本文地址:http://blog.youkuaiyun.com/scarthr/article/details/42124109
ActionBar也是Android3.0之后推出的新功能,它取代了原来Activity的标题栏,我们可以使用它做好多事情。
一 ActionBar简介
显示ActionBar:getActionBar().hide()
隐藏ActionBar:getActionBar().show()
创建ActionBar是在menu文件夹中创建布局文件main.xml
其中showAsAction有几个属性需要注意一下:
never:设置这个还是和以前从底部弹出菜单一样。
ifRoom:当ActionBar放置不下时,显示在底部菜单。
always:显示在右上角ActionBar位置。
withText:菜单显示文字。
collapseActionView:和展开、收缩有关的设置。
一般常用的使用ifRoom|withText。
菜单menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.thr.testactionbar.MainActivity" >
<item
android:id="@+id/item1"
android:actionViewClass="android.widget.EditText"
android:icon="@drawable/ic_launcher"
android:orderInCategory="100"
android:showAsAction="always|collapseActionView"
android:title="编辑菜单"/>
<item
android:id="@+id/item2"
android:actionLayout="@layout/menu_text"
android:icon="@drawable/ic_launcher"
android:orderInCategory="100"
android:showAsAction="withText|always|collapseActionView"
android:title="文字菜单"/>
<item
android:id="@+id/item3"
android:actionLayout="@layout/menu_clock"
android:icon="@drawable/ic_launcher"
android:orderInCategory="100"
android:showAsAction="always|collapseActionView"
android:title="时钟菜单"/>
<item
android:id="@+id/item4"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_launcher"
android:orderInCategory="100"
android:showAsAction="always|collapseActionView"
android:title="搜索菜单"/>
</menu>
然后在Activity中复写onCreateOptionMenu和onOptionsItemSelected方法即可:
package com.thr.testactionbar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class MainActivity extends Activity {
private boolean isActionBarShow = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isActionBarShow) {
isActionBarShow = !isActionBarShow;
getActionBar().hide();
} else {
isActionBarShow = !isActionBarShow;
getActionBar().show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, "你点击了" + item.getTitle(), Toast.LENGTH_SHORT)
.show();
return super.onOptionsItemSelected(item);
}
}
二 上下两分的ActionBar
在Manifest中app节点下添加:
android:uiOptions="splitActionBarWhenNarrow"
即可实现上下两分的ActionBar,这是什么意思呢?就是当顶部能放下所有菜单的时候就显示在顶部,放不下所有菜单的时候就统一挪到底布,效果图:
三 收缩和展开的ActionView
我们只要在menu.xml文件中设置了
showAsAction的
collapseActionView属性,那么在点击菜单的时候就会出现收缩和展开的动画效果:
此时还需要设置actionViewClass或者actionLayout指定当展开时显示的内容。
actionViewClass是设置调用的类名,我们可以指定系统的如:
android:actionViewClass="android.widget.EditText"
actionLayout可以指定我们自己创建的布局文件。
要想监听我们的ActionBar是否展开收缩可以实现OnActionExpandListener接口,它有两个方法onMenuItemActionCollapse收缩和onMenuItemActionExpand展开。
这里顺带提一下关于SearchView的使用:
SearchView可是使用setOnQueryTextListener监听输入内容和搜索事件,使用setSubmitButtonEnabled(true),来控制是否显示提交按钮。