译--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官方文档,如有错误,敬请指出,不胜感激!
- 译--ToolBar(四)
- ToolBar的模样自己画(四)
- Androd Toolbar 的简单使用四
- Android 5.0+ 解析(四)Toolbar控件
- Design 四: CoordinatorLayout + AppBarLayout+ Toolbar+NestedScrollView
- Design 四: CoordinatorLayout + AppBarLayout+ Toolbar+NestedScrollView
- 译--ToolBar(一)
- 译--ToolBar(二)
- 译--ToolBar(三)
- ToolBar
- ToolBar
- TOOLBAR
- ToolBar
- ToolBar
- toolbar
- ToolBar
- Toolbar
- Toolbar
- 正则表达式参考文档
- LeetCode 30. Substring with Concatenation of All Words
- Android 的快速开发框架XUtils
- hihocoder 练习 A+B
- Android动画常用公共属性详解
- 译--ToolBar(四)
- Windows DLL编程中的导入导出:__declspec(dllimport) ,__declspec(dllexport) ,
- NGUI PK UGUI
- Quartz Configuration Reference
- Ubuntu下shell脚本运行异常:bash和dash的区别
- 双亲委派模型的工作过程
- 谷歌注册失败 手机已多次注册
- 把截取的视频做成Gif格式(Gifrocket)
- java环境变量配置