下面是一张使用ActionBar的界面截图:
其中,[1]是ActionBar的图标,[2]是两个action按钮,[3]是overflow按钮
2.使用ActionBar
开发API11以下的程序,首先必须在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类,否则将无法使用ActionBar。
2.1创建actionbar
Actions即ActionBar中的每个交互项,可以在代码中创建Action,也可以在XML文件中指定(位于res/menu)。在menu资源文件中定义Action的方法如下:
showAsAction属性用来定义每个Action是如何显示的,always表示
永远显示在ActionBar中,如果屏幕空间不够则无法显示,ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow中,never则表示永远显示在overflow中。
在Activity中创建ctionBar的Action代码位于onCreateOptionsMenu()中,下面一段代码展示了创建过程:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mainmenu, menu); return true; }
Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // action with ID action_refresh was selected case R.id.action_refresh: Toast.makeText(this, “Refresh selected”, Toast.LENGTH_SHORT) .show(); break; // action with ID action_settings was selected case R.id.action_settings: Toast.makeText(this, “Settings selected”, Toast.LENG .show(); break; default: break; } return true; }
menu文件也要更改
重写oncreateOptionMenu()方法
@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); }如果要想出现home按钮的话,要在onCreate()方法中加上
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // If your minSdkVersion is 11 or higher, instead use: // getActionBar().setDisplayHomeAsUpEnabled(true); }
3.2实现搜索功能(SearcherView的添加)
这种搜索效果其实在安卓的ApiDemo中就有,那么我们就来看看系统是怎么实现的吧
eclipse中new Android Sample Project>next>ApiDemos>Finish ok那么运行apidemos程序App>ActionBar>ActionBarUsage进去之后大家是不是就看到了我们先要实现的效果了
然后我们就去扒apidemos的源码看看怎么实现的,其实google工程师也是按照这个顺序命名的
因为actionViewClass也是新特性,所以要用v7报下面的命名空间
2. 创建菜单时,初始化SearchView,设置监听
@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); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); //初始化SearcherView并给它设置监听 SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setOnQueryTextListener(this); return true; } /** * 确定搜索内容回调 * @param query * @return */ @Override public boolean onQueryTextSubmit(String query) { Toast.makeText(getApplicationContext(), "确定搜索内容:"+query, Toast.LENGTH_SHORT).show(); return true;//自己处理搜索监听 } /** * 内容变化回调 * @param newText * @return */ @Override public boolean onQueryTextChange(String newText) { Toast.makeText(getApplicationContext(), "搜索内容改变:"+ newText, Toast.LENGTH_SHORT).show(); return true;//自己处理搜索监听 }