1. 程式人生 > >Android選單詳解(三)——SubMenu和IconMenu

Android選單詳解(三)——SubMenu和IconMenu

我們在上一篇介紹瞭如何在Android中建立和響應選項選單,今天我們將探索子選單和圖示選單。

子選單Sub Menu

子選單提供了一種自然的組織選單項的方式,它被大量地運用在windows和其他OS的GUI設計中。Android同樣支援子選單,你可以通過(int groupId, int itemId, int order, int titleRes)方法非常方便的建立和響應子選單。

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
    int base = Menu.FIRST;
    // 一個menu可以包括多個子選單
    SubMenu subMenu = menu.addSubMenu(base, base+1, Menu.NONE, "系統設定");
    // 子選單可以包括多個選單項
    MenuItem menuitem1 = subMenu.add(base, base+1, base+1, "顯示設定");
    subMenu.add(base, base+2, base+2, "網路設定");
    subMenu.add(base, base+3, base+3, "高階設定");
    subMenu.add(base, base+4, base+4, "安全設定");
    
    // 子選單項不支援顯示圖示,這樣做是沒意義的,儘管不會報錯!
    menuitem1.setIcon(R.drawable.displaysettings);
    
    //但是子選單本身是支援圖示的
    subMenu.setIcon(R.drawable.settings);
    
    // 顯示選單請返回true
returntrue;
}

上面的程式碼演示瞭如何建立子選單,其選單項的響應其實就是普通選單項的響應,上一篇已經作了詳細介紹,這裡不再贅述。Android中可以為子選單新增圖示,但是不會顯示其選單項的圖示,這一點需要留意。除了程式碼中的(int iconRes)方法,還有一個(int iconRes)方法可以新增子選單項欄目的標題圖示,效果如上面第三張圖。

最後需要強調的是,Menu可以包含多個SubMenu,SubMenu可以包含多個MenuItem(這三者之間的關係見Android選單詳解(一)——理解Android中的Menu),但是SubMenu不能包含SubMenu,及子選單不能巢狀!!!下面的程式碼能通過編譯,但會在執行時出錯。

subMenu.addSubMenu("又一個子選單");

圖示選單Icon Menu

Android支援在選單上顯示各種各樣的圖示,這一點我們在上面建立子選單時已經用到了。圖示選單嚴格上說並不算是一種選單的新型別,它的使用也很簡單,之所以單獨設一節是為了說明使用Icon的一些限制。Android中並不是所謂的選單項都能加上圖示,以下選單項都是不可以的(這並不意味著程式會報錯,而是執行時圖示得不到顯示):

除此以外,帶Icon的選單項不能加上覆選框(check mark)。總之,雖然精美的圖示能給我們的應用增色不少,但是濫用圖示也是會適得其反的,Android SDK給圖示選單加的這些限制也算是有效的防止我們濫用圖示了吧。