美文网首页
使用操作视图和操作提供程序

使用操作视图和操作提供程序

作者: 鹿小纯0831 | 来源:发表于2018-08-08 08:48 被阅读7次

v7 appcompat支持库工具栏为用户提供了几种与您的应用交互的不同方式。 以前的课程描述了如何定义一个动作,可以是一个按钮或一个菜单项。 本课程介绍如何添加两个通用组件:

  • 操作视图是在应用栏中提供丰富功能的操作。 例如,搜索操作视图允许用户在应用栏中键入其搜索文本,而无需更改活动或片段。

  • 动作提供者是具有自己的自定义布局的动作。 该操作最初显示为按钮或菜单项,但当用户单击该操作时,操作提供程序将以您想要定义的任何方式控制操作的行为。 例如,操作提供程序可能通过显示菜单来响应单击。

Android支持库提供了几个专门的操作视图和操作提供程序小部件。 例如,SearchView小部件实现用于输入搜索查询的操作视图,ShareActionProvider小部件实现用于与其他应用程序共享信息的操作提供程序。 您还可以定义自己的操作视图和操作提供程序。

一、添加动作视图

要添加操作视图,请在工具栏的菜单资源中创建<item>元素,如添加操作按钮所述。 将以下两个属性之一添加到<item>元素:

  • actionViewClass:实现操作的窗口小部件的类。

  • actionLayout:描述操作组件的布局资源。

showAsAction属性设置为“ifRoom | collapseActionView”“never | collapseActionView”collapseActionView标志指示当用户未与其交互时如何显示窗口小部件:如果窗口小部件位于应用栏上,则应用应将窗口小部件显示为图标。 如果窗口小部件位于溢出菜单中,则应用程序应将窗口小部件显示为菜单项。 当用户与操作视图交互时,它会展开以填充应用栏。

例如,以下代码将SearchView小部件添加到应用栏:

<item android:id="@+id/action_search"
     android:title="@string/action_search"
     android:icon="@drawable/ic_search"
     app:showAsAction="ifRoom|collapseActionView"
     app:actionViewClass="android.support.v7.widget.SearchView" />

如果用户未与窗口小部件交互,则应用程序将窗口小部件显示为android:icon指定的图标。 (如果应用栏中没有足够的空间,应用程序会将操作添加到溢出菜单。)当用户点击图标或菜单项时,窗口小部件会扩展以填充工具栏,允许用户与其进行交互。

图1.当用户单击操作视图的图标时,视图的UI将填充工具栏。

如果需要配置操作,请在活动的onCreateOptionsMenu()回调中执行此操作。 您可以通过调用getActionView()方法获取操作视图的对象引用。 例如,以下代码获取上一代码示例中定义的SearchView小部件的对象引用:

@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) searchItem.getActionView();

    // Configure the search info and add any event listeners...

    return super.onCreateOptionsMenu(menu);
}

响应动作视图扩展

如果操作的<item>元素具有collapseActionView标志,则应用程序会将操作视图显示为图标,直到用户与操作视图进行交互。 当用户单击该图标时,onOptionsItemSelected()的内置处理程序将展开操作视图。 如果您的活动子类重写onOptionsItemSelected()方法,则您的override方法必须调用super.onOptionsItemSelected(),以便超类可以展开操作视图。

如果要在展开或折叠操作时执行某些操作,可以定义实现MenuItem.OnActionExpandListener的类,并将该类的成员传递给setOnActionExpandListener()。 例如,您可能希望根据操作视图是展开还是折叠来更新活动。 以下代码段显示了如何定义和传递侦听器:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    // ...

    // Define the listener
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when action item collapses
            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
        }
    };

    // Get the MenuItem for the action item
    MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

    // Assign the listener to that action item
    MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

    // Any other things you have to do when creating the options menu...

    return true;
}

二、添加动作提供者

要声明操作提供程序,请在工具栏的菜单资源中创建<item>元素,如添加操作按钮中所述。 添加actionProviderClass属性,并将其设置为操作提供程序类的完全限定类名。

例如,以下代码声明了一个ShareActionProvider,它是一个在支持库中定义的小部件,允许您的应用与其他应用共享数据:

<item android:id="@+id/action_share"
    android:title="@string/share"
    app:showAsAction="ifRoom"
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

在这种情况下,没有必要为窗口小部件声明一个图标,因为ShareActionProvider提供了自己的图形。 如果您使用自定义操作,请声明一个图标。

有关创建自定义操作提供程序的信息,请参阅ActionProvider参考。 有关配置ShareActionProvider的信息,请参阅该类的参考。

,

相关文章

  • 使用操作视图和操作提供程序

    v7 appcompat支持库工具栏为用户提供了几种与您的应用交互的不同方式。 以前的课程描述了如何定义一个动作,...

  • 1.引论

    操作系统处于中间层,向下管理和控制硬件,向上为外层软件和用户编写的程序提供使用方便、功能强大的服务。就如下面视图所...

  • Mysql必知必会笔记——下

    操作表 视图 视图是虚拟的表。使用视图可以重用SQL语句,简化复杂的SQL操作,更改数据格式和表示等;创建视图后可...

  • 操作系统基础 锁的实现

    锁的实现 操作系统会给用户程序提供开锁,闭锁的原语操作,那么锁在操作系统中是怎么实现的呢? 1.使用中断启用与禁止...

  • SQL中视图

    内容 1. 视图概念. 视图的创建,更新和删除. 2. 如何使用视图来简化SQL操作. 3. 视图和临时表的区别,...

  • Windows操作系统快捷键大全-分类清晰,查看方便!

    Windows操作系统的主要操作包括:系统操作、程序切换、窗口操作、程序操作、对象操作、文件夹与资源管理器等。使用...

  • 【大话存储】学习笔记(14章), 虚拟化

    操作系统对硬件的虚拟化 操作系统:就是为其他程序提供编写和运行环境的程序。 由程序来运行程序,而不是程序自己来运行...

  • 异常控制流(ECF)作用

    应用程序通过使用一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务。 操作系统为应用程序提供强大的ecf机制...

  • C\C++ 中 malloc、calloc、realloc 函数

    前言 C\C++提供了底层的内存操作,为程序提供了强大的能力。在使用 malloc() calloc() real...

  • linux系统

    操作系统 操作系统位于电脑硬件和软件程序中间,可以直接操作电脑硬件;并且提供了操作硬件的‘系统调用’,以供其他软件...

网友评论

      本文标题:使用操作视图和操作提供程序

      本文链接:https://www.haomeiwen.com/subject/axctbftx.html