译--ToolBar(四)

来源:互联网 发布:linux就该这么学 下载 编辑:程序博客网 时间:2024/06/01 10:26

Action Views 和 Ation Providers

v7 appcompat support library toolbar 为了使用户能够更好的和app进行交流,而提供了很多种不同的方式,先前的课程描述了怎么去定义一个action,它既可以是一个app bar上的按钮,也可以是overflow menu中的一个item,本课程将要介绍的是如何去增加两个通用组件:

  • action view 也是一个action,但是它可以在app bar 内部提供丰富的操作,例如,一个搜索 action view 允许用户在app bar 的内部去输入他们的搜索文本,而不用去转换activity或者fragments.

  • action provider带有其自定义的布局,它被初始化的时候可以是一个appbar按钮,也可以是overflowmenu中的item,但是当用户点击它的时候,action provider 以任何你想定义的方式控制action 的行为,例如,点击action provider的时候,响应可以显示一个menu。

androidsupportlibraries提供了很多种actionview和actionprovider,例如,SearchView可以使用户进入搜索框,而ShareActionProvider提供了向其它app分享信息的功能,你也可以定义自己的action view和action provideer.

增加Action View

要添加一个action view,和添加action button一样,需要在menu资源文件中增加,在内增加以下两个元素:

  • actionViewClass:实现了actin的类。
  • actionLayout:描述action 组件的布局资源。

设置showAsAction属性为ifRoom|collapseActionView或者never|collapseActionView,collapseActionView标签指明了action view的显示方式,如果action view在appbar上,actionview应该作为一个图标被显示,如果是在overflow中,应该作为一个item被显示,
当用户点击action view时,action view 填充app bar。

以下代码展示了在app bar中添加一个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" />

如果用户没有点击action view,actionview展示由android:icon 定义的图片(如果没有足够的空间,actionview会被添加到overflow中)。


图示:当用户点击action view 时,view的UI填充了整个app bar.

如果你需要配置action view,可以在onCreateOptionsMenu()回调方法中进行操作,可以通过调用静态方法getActionView()来获取action view的对象索引,例如,下面的代码获得了先前样例中定义的SearchView的对象索引:

@Overridepublic 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);}

当action view扩展是做出响应

如果action view的元素中有collapseActionView 标签,当用户点击actionview时,内置的处理方法–onOptionItemSelected()扩展action view,如果你的actiity子类覆写了onOptionItemSelected()方法,在你覆写的方法中必须调用super.onOptionsItemSelected(),使超类可以扩展action view。

如果想要在action view 扩展或者collapsed时做一些其它事,你可以定义一个实现了MenuItem.OnActionExpandListener的类,并通过setOnActionExpandListener()设置监听,例如,当一个actionview扩展或者collapse的时候,你想要更新activity,正如下面代码所展示的:

@Overridepublic 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;}

添加一个Action Provider

和action view一样,首先在menu文件中添加一个,在中增加一个actionProviderClass属性,并且设置它的值为action provider类的全类名。

例如,接下来的代码定义了一个ShareActionProvider,这是一个定义在support library中的部件,它可以让你分享数据到其他的app:

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

在这个例子中,不需要定义一个icon,因为ShareActionProvider提供有自己的图标,如果你正在使用一个custom action,可以定义一个图标。

想了解更多的关于创建custom action provider的信息,可以参考ActionProvider.

完全翻译自android官方文档,如有错误,敬请指出,不胜感激!

1 0
原创粉丝点击