Action View、Action Provider、Navigation Tabs的详细用法

  在上一篇文章(Android之官方导航栏ActionBar)中,我们介绍了ActionBar各组成部分的基本应用。ActionBar除了提供Action Buttons外,还提供了多种导航方式如 Action View、Action Provider、Navigation Tabs、Drop-down Navigation等,下面我们将具体介绍他们的用法。

一、Action View

  首先来看Action View,action view是用于替换action button并显示在action bar上面的一种可视组件。在此一SearchView为例,先上效果图:

  先上menu.xml文件,如下

<menu xmlns:android=""xmlns:app=""xmlns:tools="" tools:context=".MainActivity"><item android:id="@+id/action_search_actionview"android:title="搜索"android:icon="@drawable/biz_pc_list_search_icon_dark"app:showAsAction="ifRoom|collapseActionView"app:actionViewClass="android.support.v7.widget.SearchView" /></menu>

  showAsAction属性在上篇文章已经讲过,在这里大家要注意的是collapseActionView这个属性值,此属性会将action view折叠到一个按钮中,用户点击的时候才会展开。

  ActionViewClass属性用于指定action view的类,这里的SearchView是系统提供的,我们也可以自定义。

  当我们需要监听ActionView的相关事件时,我们需要在方法中取得SearchView对象,具体如下:

1、3.0之前:

MenuItem action_view = menu.findItem(R.id.action_search_actionview);

SearchView searchView = (SearchView)MenuItemCompat.getActionView(action_view);

2、3.0之后:

menu.findItem(R.id.action_search_actionview).getActionView();

  在得到SearchView对象后,我们可以监听SearchView的相关事件,如SearchView的打开关闭;当SearchView中搜索文本发生变化或者提交搜索信息时,具体如下:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {@Overridepublic boolean onQueryTextSubmit(String s) {Toast.makeText(MainActivity.this,"提交文本:"+s,Toast.LENGTH_SHORT).show();return false;}@Overridepublic boolean onQueryTextChange(String s) {Toast.makeText(MainActivity.this,"当前文本:"+s,Toast.LENGTH_SHORT).show();return false;}});MenuItemCompat.setOnActionExpandListener(action_view,new MenuItemCompat.OnActionExpandListener() {@Overridepublic boolean onMenuItemActionExpand(MenuItem item) {Toast.makeText(MainActivity.this,"actionView展开了!",Toast.LENGTH_SHORT).show();return true;}@Overridepublic boolean onMenuItemActionCollapse(MenuItem item) {Toast.makeText(MainActivity.this,"actionView关闭了!",Toast.LENGTH_SHORT).show();return true;}});

二、Action provider

  Action provider同ActionView 类似可以替换ActionBar中的Action Button,不同的是Action Provider提供子菜单的方式,下面我们以系统提供的ShareActionProvider来讲解Action Provider的用法,同样,先上效果图:

  Menu.xml的代码如下:

<item android:id="@+id/action_provider_share"android:title="分享"android:icon="@drawable/ic_launcher"app:showAsAction="ifRoom"app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

  这里最主要的属性就是 actionProviderClass,此属性用于指定ActionProvider。

  Java代码如下:

MenuItem shareItem = menu.findItem(R.id.action_provider_share);ShareActionProvider mShareActionProvider =(ShareActionProvider)MenuItemCompat.getActionProvider(shareItem);Intent shareIntent = new Intent();shareIntent.setType("image/*");mShareActionProvider.setShareIntent(shareIntent);

  那么我们如何自定义实现一个ActionProvider呢?很简单,我们只需要继承ActionProvider即可,然后实现onCreateActionView、onPerformDefaultAction,并提供构造函数,具体内容如下:

public class MyActionProvider extends ActionProvider {private Context mContext;/*** Creates a new instance.** @param context Context for accessing resources.*/public MyActionProvider(Context context) {super(context);this.mContext = context;}@Overridepublic View onCreateActionView() {View view = LayoutInflater.from(this.mContext).inflate(R.layout.action_provider_layout,null,false);Button btnOk = (Button)view.findViewById(R.id.btnOk);btnOk.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(mContext,"点吧",Toast.LENGTH_SHORT).show();}});return view;}@Overridepublic boolean onPerformDefaultAction(){//处于action flow时,选中时调用Toast.makeText(mContext,"点吧",Toast.LENGTH_SHORT).show();return true;}}

  效果如下:

不论你在什么时候结束,重要的是结束之後就不要悔恨

Action View、Action Provider、Navigation Tabs的详细用法

相关文章:

你感兴趣的文章:

标签云: