首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

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

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

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

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 14290|回復(fù): 0
上一主題 下一主題
[教程]

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
>
這里有一些大多數(shù)菜單項(xiàng)都有的特性   
   
當(dāng)我們添加新的條目到一個(gè)菜單中,你可以讓所有條目包含在一個(gè)組中,菜單組是菜單條目的集合,里面的菜單那項(xiàng)可以共享某些特性,比如是否可見、可用、可選。   
一個(gè)菜單組被定義為整形(或者在xml中配置一個(gè)資源id),往menu中使用add()方法添加菜單項(xiàng)時(shí),如果參數(shù)中包含了菜單組的id,那么這個(gè)條目會(huì)添加到相應(yīng)的菜單組中。比如add(int,int,int,int)。使用setGroupVisible()方法可以設(shè)置整個(gè)組是否隱藏。setGroupEnabled()發(fā)那個(gè)發(fā)設(shè)置整個(gè)組是否可用,setGroupCheckable()設(shè)置整個(gè)組是否可選。   
   
     
任何菜單項(xiàng)都有是否可選的接口。可以是一個(gè)獨(dú)立的選擇框、單選框、單選按鈕復(fù)選框,參考上面截圖。   
注意:在Icon菜單中,菜單項(xiàng)不能顯示為但則狂或者單選按鈕。如果你想在icon菜單中讓條目可選,必須自己在狀態(tài)改變時(shí)改變條目的現(xiàn)實(shí)。   
想讓一個(gè)條目可選,可以使用setCheckable()方法,像這樣。   
   
   
  1. view plaincopy to clipboardprint?   
    menu.add(0, VIBRATE_SETTING_ID, 0, "Vibrate")     
        .setCheckable(true);  
復(fù)制代碼
這樣會(huì)顯示一個(gè)選擇框(前提是他不是一個(gè)icon菜單),當(dāng)條目被選中時(shí),onOptionsItemSelected()回調(diào)方法會(huì)被調(diào)用。這里你必須設(shè)置選擇框的狀態(tài),你可以使用isChecked()查詢當(dāng)前狀態(tài)或者使用setChecked()方法設(shè)置狀態(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;     
    ...     
    }
復(fù)制代碼
如果想讓幾個(gè)radio選擇按鈕成為一個(gè)單選按鈕組,可以設(shè)置相同的groupId,然后調(diào)用setGroupCheckable()方法即可。這種情況下,不用每個(gè)item都調(diào)用setCheckable()方法,下面是一個(gè)子菜單中的兩個(gè)單選按鈕組:
   
  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);  
復(fù)制代碼
在setGroupCheckable()方法中,第一個(gè)參數(shù)為要設(shè)置的groupId,第二個(gè)為菜單項(xiàng)是否可選,最后一個(gè)參數(shù)是是否為單選(設(shè)為false的則所有item選擇情況相互獨(dú)立,即可以多選),當(dāng)group設(shè)為單選時(shí),每一次有條目被選中時(shí),其他選項(xiàng)自動(dòng)設(shè)置為未選狀態(tài)(即單選)。注意:可選菜單按鈕是基于會(huì)話的,其狀態(tài)、結(jié)果并不會(huì)保存在設(shè)備上。如截圖所示:在地圖程序中的設(shè)置并不會(huì)保存。如果你想把設(shè)置的記過保存,可以使用Preferences累,并且使用PreferencesActivity類來管理他們。使用setAlphabeticShortcut(char)方法,可以給菜單項(xiàng)中添加快捷鍵,使用setNumericShortcut(int)可以設(shè)置數(shù)字快捷鍵,或者使用setShortCut(char,int)。大小寫不敏感,例如:
   
  1. view plaincopy to clipboardprint?   
    menu.add(0, MENU_QUIT, 0, "Quit")     
        .setAlphabeticShortcut(q);  
復(fù)制代碼
現(xiàn)在,當(dāng)菜單打開時(shí),或者按下menu鍵時(shí),按下q鍵將會(huì)選擇這個(gè)條目。這個(gè)快捷鍵會(huì)當(dāng)成菜單項(xiàng)的一個(gè)小提示來顯示,在菜單項(xiàng)標(biāo)簽的下面(icon菜單除外)。注意:快捷鍵不能加載Context菜單中。如果你閱讀了以前的章節(jié),你會(huì)對(duì)Android Intents有所熟悉,它允許應(yīng)用程序綁定到其他程序上,共享信息,各個(gè)任務(wù)間通信。就像你的程序可以啟動(dòng)一個(gè)web瀏覽器、或者email客戶端或者其他的activity,你可以在一個(gè)菜單中運(yùn)行它們。有兩種方式:為每個(gè)菜單項(xiàng)定義一個(gè)intent;或者定義intent然后允許Android自動(dòng)搜索activity,并為每個(gè)符合條件的activity添加菜單項(xiàng)。關(guān)于建立intents和為程序提供服務(wù)的詳細(xì)信息,可以參考Intents and Intent Filter 章節(jié)為單獨(dú)的菜單項(xiàng)設(shè)置intent如果你想讓一個(gè)菜單項(xiàng)運(yùn)行一個(gè)新的activity,那么你需要調(diào)用菜單項(xiàng)的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));  
復(fù)制代碼
當(dāng)點(diǎn)擊菜單項(xiàng)時(shí),android 會(huì)自動(dòng)運(yùn)行設(shè)置好的activity。注意:這種運(yùn)行方式不會(huì)返回?cái)?shù)據(jù),如果你想得到返回?cái)?shù)據(jù),那么不能使用setIntent()方法。你應(yīng)該在onOptionsMenuItemSelected()方法或onContextMenuItemSelected()方法中調(diào)用startActivityForResult()方法。當(dāng)前程序或者當(dāng)前選項(xiàng)有可能會(huì)關(guān)聯(lián)很多的activity,所以程序便可以動(dòng)態(tài)的添加菜單項(xiàng)來執(zhí)行那些操作。在創(chuàng)建menu菜單時(shí),根據(jù)當(dāng)前選定項(xiàng)的MIME類型,來使用Intent.ALTERNATIVE_CATEGORY或者Intent.SELECTED_ALTERNATIVE這兩個(gè)參數(shù)來設(shè)置intent的分類,或者其他的參數(shù)來讓intent filter (intent過濾器)啟動(dòng)一個(gè)新的acticity。然后調(diào)用addIntentOptions()來讓android搜索到符合要求的服務(wù)并且添加到menu菜單中。如果沒有合適的相應(yīng)程序則菜單不添加條目。注意:SELECTED_ALTERNATIVE 處理當(dāng)前屏幕里選中項(xiàng),所以,之有當(dāng)在onCreateContextMenu()方法和onPrepareOptionsMenu()方法里建立菜單時(shí)時(shí)才能使用。下面的例子,展示了程序怎樣找到額外的服務(wù)來顯示到菜單中。
   
  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;     
    }  
復(fù)制代碼
當(dāng)activity發(fā)現(xiàn)有合適的intent過濾器時(shí),便會(huì)添加一個(gè)相應(yīng)的menu菜單項(xiàng),菜單項(xiàng)會(huì)顯示lable標(biāo)簽的內(nèi)容。addIntentOptions()方法會(huì)返回添加的菜單項(xiàng)的個(gè)數(shù)。必須注意:當(dāng)addIntentOptions()方法被調(diào)用時(shí),他將會(huì)覆蓋第一個(gè)參數(shù)所指定菜單里的所有項(xiàng)。如果你想為其他菜單提供服務(wù),你只需要定義一個(gè)intent filter,只要再<category>標(biāo)簽里包含 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>  
復(fù)制代碼
  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

上一篇:《Android Dev Guide》系列教程13:用戶界面之UI事件的處理
下一篇:《Android Dev Guide》系列教程10:用戶界面之創(chuàng)建菜單

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-12-23 12:27 , Processed in 0.060600 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表