牛骨文教育服务平台(让学习变的简单)

安卓SDK11.0版本以上就支持Action Bar了。所谓的Action Bar实际上就是代替以前的标题栏的存在,如果设置了那就会在Activity的顶部显示,我们可以在AndroidManifest.xml里面这样显示声明ActionBar:android:theme="@android:style/Theme.Holo"

一般情况下,我们需要在onCreateOptionsMenu里面把自定义的视图加载进去:

@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

然后可以知道我们加载了一个R.menu.main的视图,这个视图是这样写的:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
    <item
        android:id="@+id/writeArticle"
        android:icon="@drawable/ic_launcher"
        android:showAsAction="always"
        android:title="写文章">
    </item>

</menu>

第一个item是菜单,第二个item是我自定义的一个项。

其中要注意两个地方:

1)showAsAction:设置该条目什么时候显示在ActionBar里面

这个属性可接受的值有:
  1、always:这个值会使菜单项一直显示在Action Bar上。
  2、ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
  3、never:这个值使菜单项永远都不出现在Action Bar上。
  4、withText:这个值使菜单项和它的图标,菜单文本一起显示。

2)orderInCategory:actionbar里每个item的优先级,值越大优先级越低,actionbar地方不够就会放到overflow中。

那么设置了item之后怎么监听点击事件呢?

其实item点击之后会触发Activity里面的onOptionsItemSelected回调函数,下面是我处理的代码:

@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.writeArticle:
			Toast.makeText(this, "write", 0).show();
			break;

		default:
			Toast.makeText(this, "null", 0).show();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

这样设置我通过点击自定义的item writeArticle就能够Toast一条信息了。

最后是完整的Activity代码,还是贴出来吧,很简单。

package com.example.luntan;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.writeArticle:
			Toast.makeText(this, "write", 0).show();
			break;

		default:
			Toast.makeText(this, "null", 0).show();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

}