《Android》『OptionsMenu、SubMenu、ContextMenu』- 選項選單、子選單、長按選單元件的基本用法

《Android Developers 參考文獻》

➥Menus

 

《簡單介紹》

在早期的 Android 手機上,我們通常都可以看到一個實體的 Menu 鍵(現在大多已轉變成虛擬按鈕),而這個 Menu 鍵叫出來的就是 android 程式的功能表選單,在 Android 中,提供了三種不同類型的選單元件,分別是 OptionsMenu、SubMenu 以及 ContextMenu,在這邊我們就一個一個來介紹。

 

《基本用法》

與大部分的 Android 元件一樣,選單內容的建構可以分為靜態與動態生成,差別在於靜態是在 xml 資源檔中先設定好資料,而動態則是於程式碼執行的過程中建立選單的內容,這邊我們直接以動態生成的方式,說明不同選單元件的使用方式。(靜態生成可以參考 ActionBar 這篇)

➥ OptionsMenu – 選項選單

➥ SubMenu – 子選單

➥ ContextMenu – 長按選單

OptionsMenu – 選項選單

透過覆寫 onCreateOptionsMenu() 方法,我們可以建立一個基本的選項選單 OptionsMenu,程式碼如下 –

MainActivity.java

我們在 onCreateOptionsMenu(Menu menu) 中,宣告了兩個基於 MenuItem 類別的物件,分別取名為 menu1、menu2,並將這兩個物件加入至 menu 中回傳,意思就是我們把 Menu 選單設定了兩個按鈕,而這兩個按鈕就是 menu1 與 menu2。

常用到的設定方法條列如下 –

@Override
public boolean onCreateOptionsMenu(Menu menu)

➥初始化選單內容。

@Override
public boolean onOptionsItemSelected(MenuItem item)

➥選單項選取時觸發處理,觸發時機與 OnMenuItemClickListener  監聽器類似。

@Override
public void onOptionsMenuClosed(Menu menu)

➥選單關閉時觸發處理

add()

增加選單項。

addSubMenu()

增加子選單項。

setTitle()、getTitle()

設定、取得選單項標題。

setOrder()、getOrder()

設定、取得選單項順序。

setIcon()、getIcon()

設定、取得選單項圖示。

setAlphabeticShortcut()、getAlphabeticShortcut()

設定、取得選單項之字母快捷鍵。

setNumericShortcut()、getNumericShortcut()

設定、取得選單項之數字快捷鍵。

setShortcut()

設定選單項之字母與數字快捷鍵。

setOnMenuItemClickListener()

設定選單項按紐監聽器。

 

SubMenu – 子選單

在剛剛的例子中,我們成功的為 Menu 選單加入了兩個選單項,但是這兩個選單項是只有一層的,若是我們想做出多層的效果呢?其實很簡單,我們先前在宣告選單項的時候,是使用 MenuItem 類別來建立物件,若是我們想做出帶有子選單的選單項,則改用 SubMenu 類別來建立即可。

MainActivity.java

宣告的方式與前面幾乎一樣,這邊要特別說明一下的是每個 Menu 選單項在宣告的時候,都會附帶一個群組 ID 以及唯一的選單項 ID,我們透過群組 ID 劃分不同性質的 Menu 選單項,並利用選單項 ID 來識別不同的選單項。

 

ContextMenu – 長按選單

ContextMenu 類別繼承自 Menu 類別,因此其很多方法都與 Menu 類別類似。長按選單的意思,就是當我們長按某一個介面元件以後,會彈跳出來的選單視窗,在 Android 中,我們可以在某個 View 物件上,註冊長按選單,如此一來,使用者便可以透過長按該 View 物件來呼叫長按選單。

MainActivity.java

與使用 OptionMenu 不太一樣的地方是,在這裡我們是透過 onCreateContextMenu() 來定義長按選單的內容,並透過 onContextItemSelected() 來定義選單項選取時的觸發事件,最後透過 onContextMenuClosed() 來定義選單項關閉時的觸發事件。

@Override
public boolean onCreateContextMenu(Menu menu)

➥初始化選單內容。

@Override
public boolean onContextItemSelected(MenuItem item)

➥選單項選取時觸發處理,觸發時機與 OnMenuItemClickListener  監聽器類似。

@Override
public void onContextMenuClosed(Menu menu)

➥選單關閉時觸發處理。

 

延伸閱讀:

Android 工作筆記總整理

賽肥膩膩

我們是低調到不行的肥膩夫妻檔,一路上一邊吵鬧一邊記錄著生活大小事,最近迷上了宅在家追劇,希望能透過文字將所有看過的影集好好紀錄,整理成屬於我們自己的回憶資料庫。

上 / 下一篇文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *