欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ActionBar菜单的特殊用法

程序员文章站 2022-06-03 13:03:17
...

ActionBar菜单的特殊用法

ActionProvider:

可以为Action bar的菜单按钮添加子菜单。

 

新建了一个MyActionProvider继承自ActionProvider,重写hasSubMenu()方法并返回true,然后在onPrepareSubMenu通过调用SubMenu的add()方法添加子菜单。

public class MyActionProvider extends ActionProvider {

	public MyActionProvider(Context context) {
		super(context);
	}

	@Override
	public View onCreateActionView() {
		return null;
	}

	@Override
	public void onPrepareSubMenu(SubMenu subMenu) {
		subMenu.clear();
		subMenu.add("sub item 1").setIcon(R.drawable.ic_launcher)
				.setOnMenuItemClickListener(new OnMenuItemClickListener() {
					@Override
					public boolean onMenuItemClick(MenuItem item) {
						return true;
					}
				});
		subMenu.add("sub item 2").setIcon(R.drawable.ic_launcher)
				.setOnMenuItemClickListener(new OnMenuItemClickListener() {
					@Override
					public boolean onMenuItemClick(MenuItem item) {
						return false;
					}
				});
	}

	@Override
	public boolean hasSubMenu() {
		return true;
	}

}

通过设置android:actionProviderClass将MyActionProvider加入菜单。为了兼容android 2.x,添加xmlns:yourappname="http://schemas.android.com/apk/res-auto",将android:改成yourapp:。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:helloworld="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/MyActionProvider"
        android:icon="@drawable/MyActionProvider"
        android:orderInCategory="1"
        android:title="MyActionProvider"
        helloworld:actionProviderClass="com.example.helloworld.MyActionProvider"
        helloworld:showAsAction="ifRoom"/>

</menu>

添加子菜单的另一种方法:在菜单资源文件<item></item>中插入<menu></menu>。

ActionView:

在ActionBar直接显示一个具体的视图。

 

在menu资源中通过actionViewClass属性来指定一个控件,通常使用SearchView,也可以是自定义控件。为兼容android 2.x,使用SearchView时导入android.support.v7.widget.SearchView,而不是android.widget.SearchView。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:helloworld="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/CustomView"
        android:icon="@drawable/CustomView"
        android:orderInCategory="1"
        android:title="CustomView"
        helloworld:actionViewClass="com.example.helloworld.CustomView"
        helloworld:showAsAction="ifRoom|collapseActionView"/>

</menu>

在Activity的onCreateOptionsMenu(Menu menu)函数获取ActionView。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	// Inflate the menu; this adds items to the action bar if it is present.
	MenuInflater inflater = getMenuInflater();
	inflater.inflate(R.menu.optionsmenu, menu);
	MenuItem menuItem = menu.findItem(R.id.CustomView);  
	CustomView customView = (CustomView) menuItem.getActionView();
	//设置CustomView
	......
	return true;
}