背景關系選單指的是根據點擊的位置來判斷彈出什么樣的選單,例如在Android Studio的檔案夾上長按彈出的選單(圖1)與某個app圖示上長按彈出的選單(圖2)不同,

圖1 檔案夾上長按彈出的選單

圖2 app圖示上長按彈出的選單
使用背景關系選單主要分為三個步驟,第一步是創建背景關系選單;第二步是注冊背景關系選單;第三步是為背景關系選單創建回應,
1 創建背景關系選單
創建背景關系選單分為兩個步驟,一是通過XML檔案創建選單,二是將XML實體化為Menu類的物件,
1.1通過XML檔案創建選單
通過XML檔案創建選單的方法與《Android Studio中選項選單的使用方法2-1》中提到的方法相同,XML檔案的內容如圖3所示,

圖3 背景關系選單的XML檔案內容
從圖3中可以看出,創建的背景關系選單包含了“復制”、“粘貼”和“剪切”三項,
1.2 將XML實體化為Menu類的物件
要將XML實體化為Menu類的物件,則需要重寫MainActivity類的onCreateContextMenu()方法,如圖4所示,

圖4 重寫的onCreateContextMenu()方法
當顯示MainActivity上的某個視圖的背景關系選單時就會呼叫onCreateContextMenu()方法,該方法有三個引數(圖4①),其中,第一個引數是與視圖關聯的背景關系選單;第二個引數是與背景關系選單的視圖,即長按哪個視圖會顯示該背景關系選單;第三個引數是ContextMenuInfo類的物件,包含了背景關系選單的一些資訊,
在重寫的onCreateContextMenu()方法內部,首先呼叫其父類的onCreateContextMenu()方法(圖4②),以便載入默認的背景關系選單,因為需要通過MenuInflater類才能將XML檔案轉換為Menu類的物件,因此,首先通過getMenuInflater()方法獲取本程式的MenuInflater,并將其保存在mi中(圖4③),最后,通過mi呼叫MenuInflater類的方法inflate()將XML檔案轉換為Menu類(圖4④),inflate()方法的第一個引數是要轉換的XML檔案,第二個引數是轉換后的Menu類物件,其中,R.menu.longclick是“通過XML檔案創建選單”中創建的XML檔案資源,menu是onCreateContextMenu()方法的第一個引數,
2 注冊背景關系選單
在MainActivity的onCreate()方法中,注冊背景關系選單,即將視圖與背景關系選單關聯起來,當長按該視圖后,會顯示創建的背景關系選單,如圖5所示,

圖5 注冊背景關系選單
其中,et1是EditText類的物件,通過圖5①將et1與MainActivity活動中的EditText輸入框視圖關聯,R.id.activity_et1是該視圖的ID,之后,通過registerForContextMenu()方法,為指定的視圖注冊背景關系選單,即將視圖與背景關系選單關聯(圖5②),
3 為背景關系選單創建回應
重寫MainActivity類的onContextItemSelected()方法為背景關系選單創建回應,如圖6所示,當背景關系選單中某項被選中后,就會呼叫該方法,

圖6 onContextItemSelected()方法
其中,onContextItemSelected()方法的引數是MenuItem介面的物件item,MenuItem介面可以用來訪問背景關系選單的選單項,在onContextItemSelected()方法內部通過item呼叫MenuItem介面的getItemId()獲取被選中的選單項的ID,之后通過switch.case陳述句對不同的選單項進行不同的回應,默認情況下呼叫MainActivity父類的onContextItemSelected()方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/355354.html
標籤:其他
