首頁 收藏 QQ群
 網站導航

ZNDS智能電視網 推薦當貝市場

TV應用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 13848|回復: 0
上一主題 下一主題
[教程]

《Android Dev Guide》系列教程11:用戶界面之Menu菜單特性

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
>
這里有一些大多數(shù)菜單項都有的特性   
   
當我們添加新的條目到一個菜單中,你可以讓所有條目包含在一個組中,菜單組是菜單條目的集合,里面的菜單那項可以共享某些特性,比如是否可見、可用、可選。   
一個菜單組被定義為整形(或者在xml中配置一個資源id),往menu中使用add()方法添加菜單項時,如果參數(shù)中包含了菜單組的id,那么這個條目會添加到相應的菜單組中。比如add(int,int,int,int)。使用setGroupVisible()方法可以設置整個組是否隱藏。setGroupEnabled()發(fā)那個發(fā)設置整個組是否可用,setGroupCheckable()設置整個組是否可選。   
   
     
任何菜單項都有是否可選的接口。可以是一個獨立的選擇框、單選框、單選按鈕復選框,參考上面截圖。   
注意:在Icon菜單中,菜單項不能顯示為但則狂或者單選按鈕。如果你想在icon菜單中讓條目可選,必須自己在狀態(tài)改變時改變條目的現(xiàn)實。   
想讓一個條目可選,可以使用setCheckable()方法,像這樣。   
   
   
  1. view plaincopy to clipboardprint?   
    menu.add(0, VIBRATE_SETTING_ID, 0, "Vibrate")     
        .setCheckable(true);  
復制代碼
這樣會顯示一個選擇框(前提是他不是一個icon菜單),當條目被選中時,onOptionsItemSelected()回調方法會被調用。這里你必須設置選擇框的狀態(tài),你可以使用isChecked()查詢當前狀態(tài)或者使用setChecked()方法設置狀態(tài)。類似于onOptionsItemsSelected()方法。
   
  1. view plaincopy to clipboardprint?   
    switch (item.getItemId()) {     
    case VIBRATE_SETTING_ID:     
      if (item.isChecked()) item.setChecked(false);     
      else item.setChecked(true);     
      return true;     
    ...     
    }
復制代碼
如果想讓幾個radio選擇按鈕成為一個單選按鈕組,可以設置相同的groupId,然后調用setGroupCheckable()方法即可。這種情況下,不用每個item都調用setCheckable()方法,下面是一個子菜單中的兩個單選按鈕組:
   
  1. view plaincopy to clipboardprint?   
    SubMenu subMenu = menu.addSubMenu("Color");     
    subMenu.add(COLOR_MENU_GROUP, COLOR_RED_ID, 0, "Red");     
    subMenu.add(COLOR_MENU_GROUP, COLOR_BLUE_ID, 0, "Blue");     
    subMenu.setGroupCheckable(COLOR_MENU_GROUP, true, true);  
復制代碼
在setGroupCheckable()方法中,第一個參數(shù)為要設置的groupId,第二個為菜單項是否可選,最后一個參數(shù)是是否為單選(設為false的則所有item選擇情況相互獨立,即可以多選),當group設為單選時,每一次有條目被選中時,其他選項自動設置為未選狀態(tài)(即單選)。注意:可選菜單按鈕是基于會話的,其狀態(tài)、結果并不會保存在設備上。如截圖所示:在地圖程序中的設置并不會保存。如果你想把設置的記過保存,可以使用Preferences累,并且使用PreferencesActivity類來管理他們。使用setAlphabeticShortcut(char)方法,可以給菜單項中添加快捷鍵,使用setNumericShortcut(int)可以設置數(shù)字快捷鍵,或者使用setShortCut(char,int)。大小寫不敏感,例如:
   
  1. view plaincopy to clipboardprint?   
    menu.add(0, MENU_QUIT, 0, "Quit")     
        .setAlphabeticShortcut(q);  
復制代碼
現(xiàn)在,當菜單打開時,或者按下menu鍵時,按下q鍵將會選擇這個條目。這個快捷鍵會當成菜單項的一個小提示來顯示,在菜單項標簽的下面(icon菜單除外)。注意:快捷鍵不能加載Context菜單中。如果你閱讀了以前的章節(jié),你會對Android Intents有所熟悉,它允許應用程序綁定到其他程序上,共享信息,各個任務間通信。就像你的程序可以啟動一個web瀏覽器、或者email客戶端或者其他的activity,你可以在一個菜單中運行它們。有兩種方式:為每個菜單項定義一個intent;或者定義intent然后允許Android自動搜索activity,并為每個符合條件的activity添加菜單項。關于建立intents和為程序提供服務的詳細信息,可以參考Intents and Intent Filter 章節(jié)為單獨的菜單項設置intent如果你想讓一個菜單項運行一個新的activity,那么你需要調用菜單項的setIntent()方發(fā)來定義intent。例如,在onCreateOptionMenu()里,你可以這樣定義:
   
  1. view plaincopy to clipboardprint?   
    MenuItem menuItem = menu.add(0, PHOTO_PICKER_ID, 0, "Select Photo");     
    menuItem.setIntent(new Intent(this, PhotoPicker.class));  
復制代碼
當點擊菜單項時,android 會自動運行設置好的activity。注意:這種運行方式不會返回數(shù)據(jù),如果你想得到返回數(shù)據(jù),那么不能使用setIntent()方法。你應該在onOptionsMenuItemSelected()方法或onContextMenuItemSelected()方法中調用startActivityForResult()方法。當前程序或者當前選項有可能會關聯(lián)很多的activity,所以程序便可以動態(tài)的添加菜單項來執(zhí)行那些操作。在創(chuàng)建menu菜單時,根據(jù)當前選定項的MIME類型,來使用Intent.ALTERNATIVE_CATEGORY或者Intent.SELECTED_ALTERNATIVE這兩個參數(shù)來設置intent的分類,或者其他的參數(shù)來讓intent filter (intent過濾器)啟動一個新的acticity。然后調用addIntentOptions()來讓android搜索到符合要求的服務并且添加到menu菜單中。如果沒有合適的相應程序則菜單不添加條目。注意:SELECTED_ALTERNATIVE 處理當前屏幕里選中項,所以,之有當在onCreateContextMenu()方法和onPrepareOptionsMenu()方法里建立菜單時時才能使用。下面的例子,展示了程序怎樣找到額外的服務來顯示到菜單中。
   
  1. view plaincopy to clipboardprint?   
    public boolean onCreateOptionsMenu(Menu menu){     
        super.onCreateOptionsMenu(menu);     
        // Create an Intent that describes the requirements to fulfill, to be included     
        // in our menu. The offering app must include a category value of Intent.CATEGORY_ALTERNATIVE.      
        Intent intent = new Intent(null, getIntent().getData());     
        intent.addCategory(Intent.CATEGORY_ALTERNATIVE);     
                
        // Search for, and populate the menu with, acceptable offering applications.     
        menu.addIntentOptions(     
             thisClass.INTENT_OPTIONS,  // Menu group      
             0,      // Unique item ID (none)     
             0,      // Order for the items (none)     
             this.getComponentName(),   // The current Activity name     
             null,   // Specific items to place first (none)     
             intent, // Intent created above that describes our requirements     
             0,      // Additional flags to control items (none)     
             null);  // Array of MenuItems that correlate to specific items (none)     
        return true;     
    }  
復制代碼
當activity發(fā)現(xiàn)有合適的intent過濾器時,便會添加一個相應的menu菜單項,菜單項會顯示lable標簽的內容。addIntentOptions()方法會返回添加的菜單項的個數(shù)。必須注意:當addIntentOptions()方法被調用時,他將會覆蓋第一個參數(shù)所指定菜單里的所有項。如果你想為其他菜單提供服務,你只需要定義一個intent filter,只要再<category>標簽里包含 ALTERNATIVE 或者 SELECTED_ALTERNATIVE 即可,例如:
   
  1. view plaincopy to clipboardprint?   
    <intent-filter label="Resize Image">     
        ...     
        <category android:name="android.intent.category.ALTERNATIVE" />     
        <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />     
        ...     
    </intent-filter>  
復制代碼
  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

上一篇:《Android Dev Guide》系列教程13:用戶界面之UI事件的處理
下一篇:《Android Dev Guide》系列教程10:用戶界面之創(chuàng)建菜單
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網 ( 蘇ICP備2023012627號 )

網絡信息服務信用承諾書 | 增值電信業(yè)務經營許可證:蘇B2-20221768 丨 蘇公網安備 32011402011373號

GMT+8, 2024-10-25 16:24 , Processed in 0.069142 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復 返回頂部 返回列表