ActionBar的使用以及向下兼容问题
来源:互联网 发布:人工智能仿生眼 编辑:程序博客网 时间:2024/06/14 20:00
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;//自己处理搜索监听 }
- ActionBar的使用以及向下兼容问题
- Anroid中使用SVG图像以及向下兼容问题的解决
- ActionBar的使用问题
- ActionBar的使用以及例子
- ActionBar的使用以及隐藏
- IOS7 适配以及向下兼容问题
- 关于IOS7以及向下兼容音量控制问题
- IOS7 适配以及向下兼容问题
- 关于IOS7以及向下兼容音量控制问题
- IOS7 适配以及向下兼容问题
- 使用v7包,actionbar的问题
- 关于使用actionBar的一些问题
- 解决Fragment向下兼容问题
- ActionBar 不能显示logo 的问题 ,背景颜色的修改, 以及ActionBar 的官方guide
- Actionbar的基本用法以及Actionbar中menu里面的图标显示控制问题
- iOS7适配以及向下兼容
- ActionBar的详细使用
- Actionbar的使用
- RML制作PDF文档
- cgroup学习(五)——create new cgroup
- 13.1.1 直接路径插入
- 13.1.2 多表插入
- cgroup学习(六)——attach task
- ActionBar的使用以及向下兼容问题
- Spring 构造系统UI资源
- (8)shell echo命令
- cgroup学习(七)——cpu子系统
- opencv2中代码在opencv3下运行时报错的修改一些方法
- 自动换行的RadioGroup
- 13.2 UPDATE
- 13.3 DELETE
- cgroup学习(八)——CPUSET子系统