ActionBar(5)自定义操作项(Action item)
来源:互联网 发布:苏联156项工程 知乎 编辑:程序博客网 时间:2024/04/28 01:07
1.操作视窗
可以添加一个视图作为一个Action Item。这个视图被称作操作被称作操作视窗,通过在xml元素的android:actionLayout属性制定我们希望现实布局资源的ID(例如@layout/mysearchview)
图7. 折叠(上)和展开(下)的搜索视窗的操作栏
要个菜单资源中的一个项目声明一个操作视窗,你既可以使用android:actionLayout属性也android:actionViewClass属性来分别指定一个布局资源或要使用的可视构件类。例如:
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/menu_search"
- android:title="@string/menu_search"
- android:icon="@drawable/ic_menu_search"
- android:showAsAction="ifRoom|collapseActionView"
- android:actionViewClass="android.widget.SearchView" />
- </menu>
android:showAsAction属性也可包含“collapseActionView”属性值,这个值是可选的,并且声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。
2.操作视窗事件
如果需要给操作视窗添加一些事件,那么就需要在onCreateOptionsMenu()回调执行期间做这件事。你能够通过调用带有菜单项ID的findItem()方法来获取菜单项,然后再调用getActionView()方操作视窗中的元素。例如,使用以下方法获取上例中的搜索视窗构件。
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.options, menu);
- SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
- // Configure the search info and add any event listeners
- ...
- return super.onCreateOptionsMenu(menu);
- }
3.处理可折叠的操作视窗
操作视窗让你在不改变Activity或Fragment的情况下,就可以给用户提供快捷的访问和丰富的操作。但是,默认情况下让操作视窗可见可能不太合适。要保证操作栏的空间(尤其是在小屏幕设备上运行时),你能够把操作视窗折叠进一个操作项按钮中。当用户选择这个按钮时,操作视窗就在操作栏中显示。被折叠的时候,如果你定义了android:showAsAction=”ifRoom”属性,那么系统可能会把这个项目放到溢出菜单中,但是当用户选项了这个菜单项,它依然会显示在操作栏中。通过给android:showAsAction属性添加“collapseActionView”属性值,你能够让操作视窗可以折叠起来。
因为在用户选择这个项目时,系统会展开这个操作视窗,所以你不必要在onOptionsItemSelected()回调方法中响应这个菜单项。在用户选择这个菜单项时,系统会依然调用onOptionsItemSelected()方法,但是除非你在方法中返回了true(指示你已经替代系统处理了这个事件),否则系统会始终展开这个操作视窗。
当用户选择了操作栏中的“向上”图标或按下了回退按钮时,系统也会把操作视窗折叠起来。
如果需要,你能够在代码中通过在expandActionView()和collapseActionView()方法来展开或折叠操作视窗。
注意:尽管把操作视窗折叠起来是可选的,但是,如果包含了SearchView对象,我们推荐你始终把这个视窗折叠起来,只有在需要的时候,由用户选择后才把它给展开。在提供了专用的“搜索”按钮的设备上也要小心了,如果用户按下了“搜索”按钮,那么也应该把这个搜索视窗给展开,简单的重写Activity的onKeyUp()回调方法,监听KEYCODE_SEARCH类型的按键事件,然后调用expandActionView()方法,就可以把操作视窗给展开。
如果你需要根据操作视窗的可见性来更新你的Activity,那么你可以定义一个OnActionExpandListener事件,并且用setOnActionExpandListener()方法来注册这个事件,然后就能够在操作视窗展开和折叠时接受这个回调方法了,如:
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.options, menu);
- MenuItem menuItem = menu.findItem(R.id.actionItem);
- ...
- menuItem.setOnActionExpandListener(new OnActionExpandListener() {
- @Override
- public boolean onMenuItemActionCollapse(MenuItem item) {
- // Do something when collapsed
- return true; // Return true to collapse action view
- }
- @Override
- public boolean onMenuItemActionExpand(MenuItem item) {
- // Do something when expanded
- return true; // Return true to expand action view
- }
- });
- }
- ActionBar(5)自定义操作项(Action item)
- ActionBar 创建自定义的Action Provider
- 自定义actionBar/ Styling the Action Bar
- 解决ActionBar Item 一直出现在Action OverFlow的问题
- ActionBar(2)基本操作:添加,去除ActionBar以及为ActionBar添加item
- ActionBar初试 menu item转换为action item及常用功能的激活
- 用代码动态控制Menu的menu item 或者ActionBar的action item
- ActionBar总结2_自定义action bar的样式
- Android UI ActionBar功能-自定义 Action Bar 样式
- 添加Action Provider 添加导航Tabs 自定义ActionBar样式
- ActionBar(3) 操作栏菜单自定义
- ActionBar(7)自定义的操作提供器
- ActionBar自定义操作栏、无法显示
- Android Support V7 包中 ActionBar的使用 (1) 添加Action Item
- Android Support V7 包中 ActionBar的使用 (1) 添加Action Item
- 自定义 ActionBar
- 自定义actionBar
- 自定义actionbar
- 陀螺仪、加速计、磁力计
- POJ3669Meteor Shower
- 使用Quartz2.1.6+Spring3.0实现任务调度简单示例
- 关于Bar(一)---Progress Bar
- #面试题#URL带有中文或者其他特殊字符时错误的问题
- ActionBar(5)自定义操作项(Action item)
- 第七章 第三题
- Java多线程优化之偏向锁原理分析
- 【MySQL之设计表(二)】一个典型的数据库设计问题
- #include #import @class 讲解
- haproxy显示真实ip
- 传值:协议传值、Block传值 、StroyBoard属性传值
- 解决.NET在应用程序级别之外使用注册为allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。
- SqlServer索引的原理与应用