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

来源:互联网 发布:人工智能仿生眼 编辑:程序博客网 时间:2024/06/14 20:00
1.ActionBar的简介==  
  ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。
ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com 或使用Support Library v7。

下面是一张使用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()中,下面一段代码展示了创建过程:

@Overridepublic 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被单击。下面代码展示了该函数的使用过程。

Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {// action with ID action_refresh was selectedcase R.id.action_refresh:Toast.makeText(this, “Refresh selected”, Toast.LENGTH_SHORT).show();break;// action with ID action_settings was selectedcase 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()方法

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu items for use in the action barMenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.main_activity_actions, menu);return super.onCreateOptionsMenu(menu);}
如果要想出现home按钮的话,要在onCreate()方法中加上

@Overridepublic 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,设置监听

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


1 0
原创粉丝点击