`
irtutsk
  • 浏览: 17739 次
社区版块
存档分类
最新评论

Contextual Action Mode

阅读更多

Contextual Action Mode

实现ActionMode.Callback接口,在接口内配置ActionMode并响应action items的点击事件。在需要显示ActionMode时调用startSupportActionMode()方法。

 

两种基本的设计:

1.对个体任意views的上下文相关操作;

    调用View的setOnLongClickListener方法。

    实现OnLongClickListener接口,在接口内调用startSupportActionMode()方法。

 

2.对一组数据的批处理,比如ListView或GridView中的项目,允许用户选择多个项目然后对它们整体执行一个动作。

public class MainActivity extends ActionBarActivity {
	private ListView mListView = null;
	private String[] mStrings = { "a", "b", "c", "d" };
	private ActionMode mActionMode = null;
	private ArrayAdapter<String> Adapter0, Adapter1;
        //设置ActionMode菜单
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Adapter0 = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, mStrings);
		Adapter1 = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_multiple_choice, mStrings);
		mListView = (ListView) findViewById(R.id.listView1);
		closeEditor();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_edit) {
			if (mActionMode != null) {
				return false;
			}
			//startSupportActionMode
			mActionMode = startSupportActionMode(mActionModeCallback);
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	//ActionMode.Callback
	private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
		@Override
		public boolean onCreateActionMode(ActionMode mode, Menu menu) {
			MenuInflater inflater = mode.getMenuInflater();
			inflater.inflate(R.menu.cab, menu);
			return true;
		}

		//预处理
		@Override
		public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
			//设置适配器
			mListView.setAdapter(Adapter1);
			//设置监听器
			mListView.setOnItemClickListener(new OnItemClickListener() {
				@Override
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
				}
			});
			//设置选择模式——多选
			mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
			return true;
		}

		//点击处理
		@Override
		public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
			switch (item.getItemId()) {
			case R.id.action_multiple_choice:
				showEditor();
				//关闭ContextualActionMode
				mode.finish();
				return true;
			default:
				return false;
			}
		}

		//销毁处理
		@Override
		public void onDestroyActionMode(ActionMode mode) {
			mActionMode = null;
			closeEditor();
		}
	};

	private void showEditor() {
		//得到选中的itemId
		long[] ids = mListView.getCheckItemIds();
		String str = "";
		for (int i = 0; i < ids.length; i++) {
			str += ids[i] + ",";
		}
		//输出ID
		Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
	}

	private void closeEditor() {
		//设置适配器
		mListView.setAdapter(Adapter0);
		//设置监听器
		mListView.setOnItemClickListener(new OnItemClickListener() {
			// onItemClick
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				//得到选中的itemId
				String ids = id + "";
				//输出ID
				Toast.makeText(MainActivity.this, ids, Toast.LENGTH_LONG)
						.show();
			}
		});
		//设置选择模式——单选
		mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
	}
}

 

自定义样式:

使用方法同ActionBar相同,这里只给出样式属性。

"android:actionModeStyle "——ActionMode样式。

"android:actionModeBackground"——ActionMode背景。

"android:actionModeSplitBackground"——分割时底部背景(同ActionBar)。

"android:actionModeCloseButtonStyle"——取消按钮样式(就是那个对号)。


 Android2.3模拟器效果图

  • 大小: 202.8 KB
分享到:
评论

相关推荐

    ActionBar中Contextual action mode的使用

    而`Contextual Action Mode`是`ActionBar`的一种扩展,它为用户提供了一种选择并处理多个相关项目的方式,常用于列表或网格视图。在本篇文章中,我们将深入探讨`Contextual Action Mode`的使用方法以及它如何增强...

    上下文菜单与上下文操作模式

    在Android应用开发中,上下文菜单(Context Menu)和上下文操作模式(Contextual Action Mode)是两种常见的用户交互设计,它们提供了在特定情境下对数据进行操作的界面。这两种设计模式在处理列表、网格或其他可选元素...

    Android--ActionBar

    此外,ActionBar还可以通过菜单项的上下文动作模式(Contextual Action Mode)来处理多选操作,进一步增强用户体验。 ### 六、总结 ActionBar是Android应用中一个强大且灵活的组件,它不仅提供了美观的界面,还...

    Contextual_Action_Bar:为了自定义操作栏,我们覆盖上下文操作栏

    在Android开发中,自定义操作栏(Contextual Action Bar,简称CAB)是一个常见的需求,它允许开发者为特定视图或选择集提供上下文相关的操作。`Contextual_Action_Bar`项目正是为此目的而设计的,它展示了如何在Java...

    ActionModetext

    在Android开发中,Action Mode是一种特殊类型的Contextual Action Bar(上下文操作栏),它为用户提供了一种临时的、与特定视图或数据集相关的操作方式。Action Mode通常出现在长按或者选择模式下,比如在列表或网格...

    安卓Android源码——MyMenuActionMode.rar

    Action Mode是Android中一种特殊的Contextual Action Bar(上下文操作栏),常用于在特定视图或选择项上提供临时的操作选项。下面我们将详细探讨这个主题,以及如何通过源码学习和定制Action Mode。 一、Action ...

    Android应用源码之MyMenuActionMode.zip

    在Android开发中,`MyMenuActionMode.zip`这个压缩包可能包含了一个自定义的菜单Action Mode的示例项目。Action Mode是Android系统提供的一种模式,它允许用户在短时间内执行一些临时的操作,通常与上下文相关的操作...

    最简洁代码实现Listview多选

    6. **Action Bar和Contextual Action Bar**:在多选模式下,可以使用Contextual Action Bar(CAB)来展示用户可以对选中条目执行的操作,如“删除”或“复制”。创建一个Action Bar样式的菜单,然后在长按事件的回调...

    Android 设置情景模式源码-IT计算机-毕业设计.zip

    在Android应用开发中,情景模式(也称为场景模式或Contextual Mode)是一种为用户提供特定功能集或界面定制的方法,以适应不同的使用环境或用户需求。这个"Android设置情景模式源码"是一个很好的学习资源,适合那些...

    androud ListView程序集锦

    长按事件在ListView中的应用通常用于触发上下文操作菜单(Contextual Action Bar)或者简单的删除操作。通过注册`OnItemLongClickListener`,当用户长按列表项时,可以执行相应的逻辑,例如弹出确认对话框或直接删除...

    BURNINTEST--硬件检测工具

    data with random seeking" test mode and only occurs with some specific test settings. Release 5.3 build 1024 WIN32 release 10 July 2008 - Workaround for the rare crash bug in Vista in atklumdisp....

Global site tag (gtag.js) - Google Analytics