在V7程序兼容性支持库Toolbar为用户提供了与应用互动几种不同的方式。以前的课程描述了如何定义一个动作,可以是一个按钮或一个菜单项。本课程介绍如何添加两个通用组件:
一个动作观点是提供应用栏内丰富的功能的操作。例如,搜索操作视图允许用户在应用栏中键入其搜索文本,而无需更改活动或片段。
一个行动提供商是一个拥有自己定制的布局动作。该操作最初显示为按钮或菜单项,但当用户单击该操作时,操作提供程序将以您想要定义的任何方式控制操作的行为。例如,操作提供程序可能通过显示菜单来响应单击。
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()将展开操作视图。如果您的activity子类重写该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属性,并将其设置为操作提供程序类的完全限定类名。
例如,以下代码声明了a ShareActionProvider,它是在支持库中定义的小部件,允许您的应用与其他应用共享数据:
<item android:id="@+id/action_share"
android:title="@string/share"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
在这种情况下,没有必要为窗口小部件声明图标,因为ShareActionProvider它提供了自己的图形。如果您使用自定义操作,请声明一个图标。
有关创建自定义操作提供程序的信息,请参阅ActionProvider参考。有关配置a的信息ShareActionProvider,请参阅该类的参考。
联系我
QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ
公众号推荐: