Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發之使用上下文菜單

android開發之使用上下文菜單

編輯:關於Android編程

android中的上下文菜單類似於PC上的鼠標右鍵單擊,不同的是android上沒有鼠標這一概念,更談不上右鍵單擊,在android中,一般是長按某個View,調出上下文菜單。與OptionsMenu不同的是,ContextMenu是一個針對View的菜單,它綁定在某一個View上,而OptionsMenu是屬於一個Activity的。

 

現在大部分浏覽器都有長按復制的功能,如下圖:

height=640

 

這種效果的實現是使用PopupWindow來實現的(關於PopupWindow的使用可以參見我的另一篇文章popupWindow使用詳解
),雖然它和我們即將要說的ContextMenu很像。

 

好了,說了這麼多,我們該說說怎麼實現上下文菜單了。

實現上下文菜單一共三個步驟:

1.重寫Activity或者Fragment中的onCreateContextMenu方法:

 

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle(你想干啥?);
		menu.setHeaderIcon(R.drawable.a4c);
		menu.add(0, 0, Menu.NONE, 復制);
		menu.add(0, 1, Menu.NONE, 剪貼);
		menu.add(0, 2, Menu.NONE, 重命名);
		menu.add(1, 3, Menu.NONE, 去新的Activity);
	}


 

2.重寫Activity或者Fragment中的onContextItemSelected方法,實現菜單事件監聽

 

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 0:
			tv.setText(item.getTitle().toString());
			break;
		case 1:
			tv.setText(item.getTitle().toString());
			break;
		case 2:
			tv.setText(item.getTitle().toString());
			break;
		case 3:
			tv.setText(item.getTitle().toString());
			startActivity(new Intent(this, SecondActivity.class));
			break;
		default:
			return super.onContextItemSelected(item);
		}
		return true;
	}

 

3.給View注冊上下文菜單

 

tv = (TextView) this.findViewById(R.id.tv);
		this.registerForContextMenu(tv);

三個步驟實現了給一個TextView注冊了上下文菜單事件,有時候我們會遇到另外情況,比如說要給ListView中的每一項都添加上下文菜單,而且當我們長按ListView該項的時候,我們還希望能夠知道我們點擊的是哪一個item,這個該怎麼實現呢?AdapterContextMenuInfo專為解決這個問題而生,看看先下面的代碼:

 

 

public class SecondActivity extends Activity {

	private ListView lv;
	private String[] menuStrs;
	private ArrayAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		lv = (ListView) this.findViewById(R.id.lv);
		initListView();
		this.registerForContextMenu(lv);
	}

	private void initListView() {
		menuStrs = new String[] { 慶歷四年春, 滕子京谪守巴陵郡, 越明年, 政通人和 };
		adapter = new ArrayAdapter(this,
				android.R.layout.simple_list_item_1, menuStrs);
		lv.setAdapter(adapter);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle(你想干啥?);
		menu.setHeaderIcon(R.drawable.a4c);
		menu.add(0, 0, Menu.NONE, 岳);
		menu.add(0, 1, Menu.NONE, 陽);
		menu.add(0, 2, Menu.NONE, 樓);
		menu.add(1, 3, Menu.NONE, 記);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
				.getMenuInfo();
		switch (item.getItemId()) {
		case 0:
			menuStrs[menuInfo.position] += 岳;
			break;
		case 1:
			menuStrs[menuInfo.position] += 陽;
			break;
		case 2:
			menuStrs[menuInfo.position] += 樓;
			break;
		case 3:
			menuStrs[menuInfo.position] += 記;
			break;
		default:
			return super.onContextItemSelected(item);
		}
		adapter.notifyDataSetChanged();
		return true;
	}
}

前面的東西都很簡單,我就不多說了,通過AdapterContextMenuInfo的實例我們可以拿到我們所點擊item的position,id等,我們這裡實現的一個效果就是點擊上下文菜單之後在每個item View後面添加一個字。

 

 

實現的效果如下圖所示:

/

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved