ActionBar的使用以及向下兼容问题

1.ActionBar的简介==  
  ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。
ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用 http://actionbarsherlock.com 或使用Support Library v7。

下面是一张使用ActionBar的界面截图:

ActionBar的使用以及向下兼容问题_第1张图片

其中,[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;
}

2.2 Action的按钮交互
     如果一个Action被单击,对于activity中的onOptionsItemSelected()将被调用。该函数的传入参数是一个MenuItem。通过判断该MenuItem的Id,即可确认是哪个Action被单击。下面代码展示了该函数的使用过程。

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;
}

onCreateOptionsMenu()只会被调用一次。若想改变Menu,可以调用invalidateOptionsMenu(),这会使onCreateOptionsMenu()将会再次被调用。

3.实现actionbar的搜索功能
3.1兼容低版本
      首先清单文件中的theme要更改

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);

} 

就可以显示出上面图片的icon 1 的效果来

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;//自己处理搜索监听
        }


你可能感兴趣的:(ActionBar的使用以及向下兼容问题)