建立一個操作功能表
一個操作功能表跟PC上的右鍵菜單類似.你應使用操作功能表為使用者介面上的某個部分提供動作選擇功能.在Android中,一個操作功能表會在使用者長按一個介面條目時出現.
你可以為任何View建立操作功能表,但是在 ListView中是最常用到操作功能表的.每當使用者在一個ListView項上長按,並且這個ListView註冊了操作功能表,那麼被按的 list item就會彈出操作功能表 (在連絡人應用中就示範了這個過程).
Register a ListView
如果你的activity使用一個ListView並且你希望所有的list
items都提供一個上下文菜單,應把ListView傳給方法registerForContextMenu(),例如:
registerForContextMenu(getListView());
為了使view提供操作功能表,你必須為這個View向系統註冊操作功能表.調用方法 registerForContextMenu() 並傳入要快顯功能表的 View 作為參數即可.當這個View被長按時,它就會顯示一個操作功能表.
為了定義操作功能表的樣子和行為,需重寫你的activity的操作功能表回調方法:onCreateContextMenu() 和onContextItemSelected().
例如,下面是一個 onCreateContextMenu() ,使用了資源檔 context_menu.xml :
@Override<br />public void onCreateContextMenu(ContextMenu menu, View v,<br /> ContextMenuInfo menuInfo) {<br /> super.onCreateContextMenu(menu, v, menuInfo);<br /> MenuInflater inflater = getMenuInflater();<br /> inflater.inflate(R.menu.context_menu, menu);<br />}MenuInflater 被用於從一個 菜單資源inflate出一個菜單. (你也可以使用 add() 來添加功能表項目們) .回呼函數的參數中包含了使用者所選擇的View 和一個ontextMenu.ContextMenuInfo 對象,它可以提供被選擇的View的更多的資訊.你可以使用這些參數來決定哪個操作功能表應被建立.但是在這個例子中,Activity所有的操作功能表都是相同的.
然後,當使用者從操作功能表選擇一個功能表項目時,系統會調用方法 onContextItemSelected(). 下面的例子展示了如何處理被選擇的功能表項目:
@Override<br />public boolean onContextItemSelected(MenuItem item) {<br /> AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();<br /> switch (item.getItemId()) {<br /> case R.id.edit:<br /> editNote(info.id);<br /> return true;<br /> case R.id.delete:<br /> deleteNote(info.id);<br /> return true;<br /> default:<br /> return super.onContextItemSelected(item);<br /> }<br />}這些代碼與選項菜單中的例子代碼基本相同.getItemId() 從所選的功能表項目擷取菜單ID,並且使用switch語句匹配菜單ID與對應的處理.並且同於選項菜單的例子,default語句調用父類的同一方法處理未被我們處理的功能表項目.
在此例中,被選擇的View條目是一個 ListView條目.為了在選擇的一個view條目上執行相應的動作,應用程式需要知道View條目的list ID.為了獲得 list ID,程式中調用了 getMenuInfo(), 它返回一個 AdapterView.AdapterContextMenuInfo 對象,這個對象包含了條目的list ID.本地方法editNote()和deleteNote()接受這個list ID用於執行一些作.
注: 操作功能表項目不支援表徵圖或快速鍵.