android菜单详解三:上下文菜单
創(chuàng)建一個(gè)上下文菜單
一個(gè)上下文菜單跟PC上的右鍵菜單類似.你應(yīng)使用上下文菜單為用戶界面上的某個(gè)部分提供動(dòng)作選擇功能.在Android中,一個(gè)上下文菜單會(huì)在用戶長按一個(gè)界面條目時(shí)出現(xiàn).
你可以為任何View創(chuàng)建上下文菜單,但是在 ListView中是最常用到上下文菜單的.每當(dāng)用戶在一個(gè)ListView項(xiàng)上長按,并且這個(gè)ListView注冊(cè)了上下文菜單,那么被按的 list item就會(huì)彈出上下文菜單 (在聯(lián)系人應(yīng)用中就演示了這個(gè)過程).
Register a ListView
如果你的activity使用一個(gè)ListView并且你希望所有的list items都提供一個(gè)上下文菜單,應(yīng)把ListView傳給方法registerForContextMenu(),例如:
registerForContextMenu(getListView());
為了使view提供上下文菜單,你必須為這個(gè)View向系統(tǒng)注冊(cè)上下文菜單.調(diào)用方法 registerForContextMenu() 并傳入要彈出菜單的 View 作為參數(shù)即可.當(dāng)這個(gè)View被長按時(shí),它就會(huì)顯示一個(gè)上下文菜單.
為了定義上下文菜單的樣子和行為,需重寫你的activity的上下文菜單回調(diào)方法:onCreateContextMenu() 和onContextItemSelected().
例如,下面是一個(gè) onCreateContextMenu() ,使用了資源文件 context_menu.xml :
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }MenuInflater 被用于從一個(gè) 菜單資源inflate出一個(gè)菜單. (你也可以使用 add() 來添加菜單項(xiàng)們) .回調(diào)函數(shù)的參數(shù)中包含了用戶所選擇的View 和一個(gè)ontextMenu.ContextMenuInfo 對(duì)象,它可以提供被選擇的View的更多的信息.你可以使用這些參數(shù)來決定哪個(gè)上下文菜單應(yīng)被創(chuàng)建.但是在這個(gè)例子中,Activity所有的上下文菜單都是相同的.
然后,當(dāng)用戶從上下文菜單選擇一個(gè)菜單項(xiàng)時(shí),系統(tǒng)會(huì)調(diào)用方法 onContextItemSelected(). 下面的例子展示了如何處理被選擇的菜單項(xiàng):
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case R.id.edit: editNote(info.id); return true; case R.id.delete: deleteNote(info.id); return true; default: return super.onContextItemSelected(item); } }這些代碼與選項(xiàng)菜單中的例子代碼基本相同.getItemId() 從所選的菜單項(xiàng)獲取菜單ID,并且使用switch語句匹配菜單ID與對(duì)應(yīng)的處理.并且同于選項(xiàng)菜單的例子,default語句調(diào)用父類的同一方法處理未被我們處理的菜單項(xiàng).
在此例中,被選擇的View條目是一個(gè) ListView條目.為了在選擇的一個(gè)view條目上執(zhí)行相應(yīng)的動(dòng)作,應(yīng)用程序需要知道View條目的list ID.為了獲得 list ID,程序中調(diào)用了 getMenuInfo(), 它返回一個(gè) AdapterView.AdapterContextMenuInfo 對(duì)象,這個(gè)對(duì)象包含了條目的list ID.本地方法editNote()和deleteNote()接受這個(gè)list ID用于執(zhí)行一些作.
注: 上下文菜單項(xiàng)不支持圖標(biāo)或快捷鍵.
轉(zhuǎn)載于:https://www.cnblogs.com/android-html5/archive/2011/12/24/2533611.html
總結(jié)
以上是生活随笔為你收集整理的android菜单详解三:上下文菜单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GeneXus 图片的创建与删除1
- 下一篇: 防止论坛用户重复登录的方法 .