Adding an Action View


  An action view is a widget that appears in the action bar as a substitute for an action button. An action view provides fast access to rich actions without changing activities or fragments, and without replacing the action bar. For example, if you have an action for Search, you can add an action view to embeds a SearchView widget in the action bar, as shown in figure 5.

Figure 5. An action bar with a collapsible SearchView.

  To declare an action view, use either the actionLayout or actionViewClass attribute to specify either a layout resource or widget class to use, respectively. For example, here's how to add the SearchView widget:

 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
     <item android:id="@+id/action_search"
           android:title="@string/action_search"
           android:icon="@drawable/ic_action_search"
           yourapp:showAsAction="ifRoom|collapseActionView"
           yourapp:actionViewClass="android.support.v7.widget.SearchView" />
 </menu>

  Notice that the showAsAction attribute also includes the "collapseActionView" value. This is optional and declares that the action view should be collapsed into a button. (This behavior is explained further in the following section about Handling collapsible action views.)

  android:showAsAction="collapseActionView" 是可折叠自定义的view

  If you need to configure the action view (such as to add event listeners), you can do so during the onCreateOptionsMenu() callback. You can acquire the action view object by calling the static method MenuItemCompat.getActionView() and passing it the corresponding MenuItem. For example, the search widget from the above sample is acquired like this:

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.main_activity_actions, menu);
     MenuItem searchItem = menu.findItem(R.id.action_search);
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
     // Configure the search info and add any event listeners
     ...
     return super.onCreateOptionsMenu(menu);
 }
  在api 11 以前 可以在onCreateOptionsMenu()函数中,通过MenuItemCompat.getActionView(xxItem) 得到它自定义的view,然后给这个view注册事件函数等.

On API level 11 or higher

  Get the action view by calling getActionView() on the corresponding MenuItem:

menu.findItem(R.id.action_search).getActionView();
  在api 11 以后 可以在onCreateOptionsMenu()函数中,直接通过item.getActionView() 得到它自定义的view,然后给这个view注册事件函数等.

  For more information about using the search widget, see Creating a Search Interface.

Handling collapsible action views

  To preserve the action bar space, you can collapse your action view into an action button. When collapsed, the system might place the action into the action overflow, but the action view still appears in the action bar when the user selects it. You can make your action view collapsible by adding "collapseActionView" to the showAsAction attribute, as shown in the XML above.

  Because the system expands the action view when the user selects the action, you do not need to respond to the item in the onOptionsItemSelected() callback. The system still calls onOptionsItemSelected(), but if you return true (indicating you've handled the event instead), then the action view will not expand.

  The system also collapses your action view when the user presses the Up button or Back button.

  If you need to update your activity based on the visibility of your action view, you can receive callbacks when the action is expanded and collapsed by defining an OnActionExpandListener and passing it to setOnActionExpandListener(). For example:

  collapseActionView 属性值表示把自定义的action view折叠到溢出菜单中.每个操作项可以注册折叠事件接口 OnActionExpandListener 得到

  展开事件回调: onMenuItemActionExpand

  折叠事件回调: onMenuItemActionCollapse
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.options, menu);
     MenuItem menuItem = menu.findItem(R.id.actionItem);
     ...

     // When using the support library, the setOnActionExpandListener() method is
     // static and accepts the MenuItem object as an argument
     MenuItemCompat.setOnActionExpandListener(menuItem, 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官方教程(7)自定义操作项的view,如何得到它及处理它的事件的更多相关文章

  1. ActionBar官方教程(11)自定义ActionBar的样式(含重要的样式属性表及练习示例)

    Styling the Action Bar If you want to implement a visual design that represents your app's brand, th ...

  2. ActionBar官方教程(8)ShareActionProvider与自定义操作项提供器

    Adding an Action Provider Similar to an action view, an action provider replaces an action button wi ...

  3. ActionBar官方教程(4)给ActionBar添加操作项及它们的事件处理

    Adding Action Items The action bar provides users access to the most important action items relating ...

  4. ContentProvider官方教程(8)自定义MIME

    MIME Type Reference Content providers can return standard MIME media types, or custom MIME type stri ...

  5. 自定义View(7)官方教程:自定义View(含onMeasure),自定义一个Layout(混合组件),重写一个现有组件

    Custom Components In this document The Basic Approach Fully Customized Components Compound Controls ...

  6. ActionBar官方教程(10)ActionBar的下拉列表模式

    Adding Drop-down Navigation As another mode of navigation (or filtering) for your activity, the acti ...

  7. ActionBar官方教程(9)ActionBar的顶部tab模式(注意,已经被弃用)

    This interface is deprecated.Action bar navigation modes are deprecated and not supported by inline ...

  8. ActionBar官方教程(6)把图标变成一个返回到上级的按钮,同一个app间,不同app间,不同fragment间

    Navigating Up with the App Icon Enabling the app icon as an Up button allows the user to navigate yo ...

  9. ActionBar官方教程(5)ActionBar的分裂模式(底部tab样式),隐藏标题,隐藏图标

    Using split action bar Split action bar provides a separate bar at the bottom of the screen to displ ...

随机推荐

  1. 不显示UITableView底部多余的分割线

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

  2. 代理的使用 一(helloworld级别)

    个人理解(估计,半年一年后,在看到这篇文章的时候,会觉得,当时真的弱爆了) 当我们自定义view的时候,比如说view上面有几个按钮,那么我们在别的地方使用这个view的时候,怎么来处理这些点击事件呢 ...

  3. android测试的相关概念以及单元测试

    1.测试的相关概念  1.根据是否知道源代码分类: 黑盒测试: a - b - c  边值测试    白盒测试: 根据源代码写测试方法 或者 测试用例; 2.根据测试的粒度分类: 方法测试:写完一个方 ...

  4. makefile--#的不正确使用

    /usr/vacpp/bin/makeC++SharedLib -o /cicm/src/dao/testcase/rel/FUNCTEST.ibmcpp -brtl -bnortllib -p100 ...

  5. 啊哈!算法:解密QQ号

    书中给出的算法有点浪费空间,可以使用循环队列进行改进,这样就不需要使用额外的空间,在原数组的基础上就可以完成解密,代码如下: #include <stdio.h> void decode( ...

  6. 【转】C# Excel 导入到 Access数据库表(winForm版)

    /// <summary> /// 获取Excel文件 /// </summary> /// <param name="sender">< ...

  7. 使用Github总结

    1. 使用Git GUI 首先熟悉一下GUI,如下: 第一步,首先将代码fork到自己的版本库下面,如下: 并获取clone URL,如下图: 然后点击GUI克隆已有版本库,如下图: 点击克隆就可以得 ...

  8. JDBC链接

    //1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar  Connection con = null;  Class.forName( " ...

  9. 笨方法学python 33课

    今天Eiffel看到了第33章,任务是把一个while循环改成一个函数. 我在把while循环改成函数上很顺利,但是不知道怎么写python的主函数,在参数的调用上也出现了问题. 通过查资料,发现py ...

  10. 开发设计模式(九)门面模式(Facade Pattern)

    什么是门面模式? 门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 大家都写过纸质的信件吧,比如给女朋友写 ...