安卓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; }
<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); }
最后是完整的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); } }