亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android開(kāi)發(fā)指南-用戶界面-菜單特性

系統(tǒng) 1924 0

菜單特性 Menu Features

下面是適用于大多數(shù)菜單項(xiàng)的一些其他的特性。

菜單組 Menu groups

當(dāng)往菜單中添加新項(xiàng)時(shí),你可以選擇把它包含在一個(gè)組中。一個(gè)菜單組是一些可以共享某些特征的菜單項(xiàng)的集合,比如它們是否可見(jiàn),是否可用,或者可否復(fù)選( checkable )。

一個(gè)組由一個(gè)整數(shù)定義(或者一個(gè) XML 里的資源 ID )。當(dāng)我們使用接受一個(gè) groupId 參數(shù)的 add() 方法,比如 add(int, int, int, int) 添加項(xiàng)時(shí),它將被添加到組中。

你可以通過(guò) setGroupVisible() 顯示或隱藏菜單組;通過(guò)啟用或禁用這個(gè)組;以及通過(guò) setGroupCheckable() 設(shè)置菜單項(xiàng)是否可以復(fù)選。

可復(fù)選菜單項(xiàng) Checkable menu items

任何菜單項(xiàng)可以被用來(lái)表示選項(xiàng)開(kāi)關(guān)的接口。這可以通過(guò)一個(gè) checkbox 來(lái)指示一個(gè)單獨(dú)的選項(xiàng),或者通過(guò)一組單選按鈕來(lái)表示互斥選項(xiàng)。(查看右邊的截屏)。

radio buttons

注意 : 在圖標(biāo)菜單中的菜單項(xiàng)不能顯示復(fù)選框或單選按鈕。如果你選擇讓圖標(biāo)按鈕中的菜單項(xiàng)變成可復(fù)選,那你必須在開(kāi)關(guān)狀態(tài)變化時(shí)自動(dòng)通過(guò)切換圖標(biāo)和文本來(lái)指示這個(gè)狀態(tài)。

要讓一個(gè)單獨(dú)的項(xiàng)變成可復(fù)選,使用 setCheckable() 方法,如下:

      
        
          
            menu.add(0, VIBRATE_SETTING_ID, 0, "Vibrate")
          
        
      
    
      
        
          
            
            
            .setCheckable(true);
          
        
      
    

這將為這個(gè)菜單項(xiàng)顯示一個(gè)復(fù)選框(除非這是個(gè)圖標(biāo)菜單)。當(dāng)這個(gè) item 被選中時(shí),通常 onOptionsItemSelected() 會(huì)被調(diào)用。你應(yīng)該在這里設(shè)置復(fù)選框狀態(tài)。你可以用 isChecked() 來(lái)查詢這個(gè)菜單項(xiàng)的當(dāng)前狀態(tài)和用 setChecked() 來(lái)設(shè)置復(fù)選狀態(tài)。就像下面一樣:

      
        
          
            switch (item.getItemId()) {
          
        
      
    
      
        
          
            case VIBRATE_SETTING_ID:
          
        
      
    
      
        
          
            
            
            if (item.isChecked()) item.setChecked(false);
          
        
      
    
      
        
          
            
            
            else item.setChecked(true);
          
        
      
    
      
        
          
            
            
            return true;
          
        
      
    
      
        
          
            ...
          
        
      
    
      
        
          
            }
          
        
      
    

為了創(chuàng)建一組互斥的單選按鈕,只要簡(jiǎn)單的為每個(gè)菜單項(xiàng)分配相同的 group ID 并調(diào)用 setGroupCheckable() 。在這個(gè)例子里,你不需要為每個(gè)菜單項(xiàng)調(diào)用 setCheckable() 方法,因?yàn)檫@個(gè)組被整體上設(shè)置為可復(fù)選。下面是在一個(gè)子菜單中創(chuàng)建兩個(gè)互斥選項(xiàng)的例子:

      
        
          
            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() 方法里,第一個(gè)參數(shù)是我們想設(shè)置為可復(fù)選的 group ID 。第二個(gè)參數(shù)表示是否設(shè)置為可復(fù)選。最后一個(gè)參數(shù)代表這些菜單項(xiàng)是否互斥(如果設(shè)置為 false ,則所有的菜單項(xiàng)將會(huì)是復(fù)選框而不是單選按鈕。當(dāng)這個(gè)組設(shè)置為互斥時(shí)(單選按鈕),每當(dāng)一個(gè)新的項(xiàng)被選中時(shí),所有其它的項(xiàng)的選擇會(huì)自動(dòng)被清除。

注意 : 可復(fù)選菜單項(xiàng)傾向于基于每次會(huì)話使用,而不保存到設(shè)備中。(例如,地圖應(yīng)用程序中的 Map mode 設(shè)置并不會(huì)被保存 - 截屏如上)。如果有一些應(yīng)用程序設(shè)置你需要為用戶保存它,那你應(yīng)該使用首選項(xiàng) Preferences 來(lái)保存數(shù)據(jù),而通過(guò)一個(gè) PreferenceActivity 來(lái)管理它們。

快捷鍵 Shortcut keys

可以為菜單項(xiàng)添加字母或數(shù)字快捷鍵, setAlphabeticShortcut(char) 方法(設(shè)置字母快捷鍵), setNumericShortcut(int) 方法(設(shè)置數(shù)字快捷鍵),或者 setShortcut(char,int) (同時(shí)設(shè)置字母和數(shù)字)。非大小寫(xiě)敏感,比如:

      
        
          
            menu.add(0, MENU_QUIT, 0, "Quit")
          
        
      
    
      
        
          
            
            
            .setAlphabeticShortcut('q');
          
        
      
    

現(xiàn)在,當(dāng)菜單打開(kāi)時(shí)(或者按住菜單鍵),按 ”q” 鍵將選擇該菜單項(xiàng)。

這個(gè)快捷鍵將以菜單項(xiàng)的提示信息而顯示在菜單項(xiàng)名稱的下面(除了圖標(biāo)菜單項(xiàng))。

注意 : 快捷鍵不能添加進(jìn)一個(gè)上下文菜單項(xiàng)中。

菜單項(xiàng)意圖 Menu item intents

如果你已經(jīng)閱讀過(guò)應(yīng)用程序基礎(chǔ) Application Fundamentals ,那么你應(yīng)該多少知道一點(diǎn) Android 意圖。它允許程序互相綁定,分享信息,以及合作執(zhí)行用戶任務(wù)。就像你的應(yīng)用程序可以發(fā)送一個(gè)意圖來(lái)啟動(dòng)瀏覽器,郵件客戶端或者另外一個(gè)活動(dòng)一樣,你可以從菜單中執(zhí)行這樣的動(dòng)作。有兩種途徑來(lái)做這件事:定義一個(gè)意圖然后分配給一個(gè)單獨(dú)的菜單項(xiàng),或者定義一個(gè)意圖并允許 Android 查找設(shè)備上的活動(dòng)然后動(dòng)態(tài)的為每個(gè)符合意圖標(biāo)準(zhǔn)的活動(dòng)添加一個(gè)菜單項(xiàng)。

請(qǐng)閱讀意圖和意圖過(guò)濾器章節(jié),以獲取更多關(guān)于意圖創(chuàng)建和應(yīng)用程序提供服務(wù)方面的信息。

為一個(gè)單獨(dú)的菜單項(xiàng)設(shè)置一個(gè)意圖 Set an intent for a single menu item

如果你想提供一個(gè)具體的菜單項(xiàng)來(lái)啟動(dòng)一個(gè)新的活動(dòng),那么你可以通過(guò) setIntent() 方法具體地為這個(gè)菜單項(xiàng)定義一個(gè)意圖。

比如,在 onCreateOptionsMenu() 方法里,你可以用一個(gè)意圖定義一個(gè)新菜單項(xiàng)如下:

      
        
          
            MenuItem menuItem = menu.add(0, PHOTO_PICKER_ID, 0, "Select Photo");
          
        
      
    
      
        
          
            menuItem.setIntent(new Intent(this, PhotoPicker.class));
          
        
      
    

當(dāng)這個(gè)菜單項(xiàng)被選中時(shí), Android 將自動(dòng)啟動(dòng)這個(gè)活動(dòng)。

注意 : 這并不會(huì)給你的活動(dòng)返回一個(gè)結(jié)果。如果你希望返回一個(gè)結(jié)果,那么不要使用 setIntent() 。相反,和通常情況一樣在 onOptionsMenuItemSelected() or onContextMenuItemSelected() 回調(diào)中處理并調(diào)用 startActivityForResult() .

動(dòng)態(tài)添加意圖 Dynamically add intents

如果有潛在的多個(gè)活動(dòng)和你的當(dāng)前活動(dòng)或所選擇菜單項(xiàng)相關(guān),那么這個(gè)應(yīng)用程序可以動(dòng)態(tài)添加菜單項(xiàng)來(lái)執(zhí)行其他的服務(wù)。

在菜單創(chuàng)建過(guò)程中,定義一個(gè)意圖,使用 Intent.ALTERNATIVE_CATEGORY / Intent.SELECTED_ALTERNATIVE 類別,當(dāng)前選擇(如果有的話)的 MIME 類型,以及其他需求,和你打開(kāi)一個(gè)新活動(dòng)時(shí)想要滿足一個(gè)意圖過(guò)濾器一樣。然后調(diào)用 addIntentOptions() 來(lái)讓 Android 查找任何滿足那些需求的服務(wù)并為你添加它們到菜單中。如果已安裝的程序沒(méi)有滿足這個(gè)意圖的,那么將不會(huì)有額外的菜單項(xiàng)被添加。

注意 : SELECTED_ALTERNATIVE 是用來(lái)處理屏幕當(dāng)前選中元素的。所以,它應(yīng)該僅當(dāng)在 onCreateContextMenu() onPrepareOptionsMenu() 里面創(chuàng)建菜單項(xiàng)時(shí)使用 , 后者每次打開(kāi)選項(xiàng)菜單時(shí)會(huì)被調(diào)用。

下面是一個(gè)說(shuō)明應(yīng)用程序如何搜索附加服務(wù)來(lái)顯示在它的菜單中的例子。

      
        
          
            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 corrolate to specific items (none)
          
        
      
    
      
        
        
      
    
      
        
          
            
            
            return true;
          
        
      
    
      
        
          
            }
          
        
      
    

對(duì)于每個(gè)活動(dòng),如果其意圖過(guò)濾器匹配我們所定義的那個(gè)意圖,則將會(huì)添加一個(gè)菜單項(xiàng),使用這個(gè)意圖過(guò)濾器的 android:label 值作為菜單項(xiàng)的文本。這個(gè) addIntentOptions() 方法也會(huì)返回所增加菜單項(xiàng)的數(shù)目。

請(qǐng)同時(shí)注意,當(dāng) addIntentOptions() 被調(diào)用時(shí),它將重寫(xiě)第一個(gè)參數(shù)指定的所有菜單組里的菜單項(xiàng)。

如果想把你的活動(dòng)的服務(wù)提供給其他應(yīng)用程序菜單,那么你只需要和通常情況一樣定義一個(gè)意圖過(guò)濾器。只是需要確保在一個(gè)意圖過(guò)濾器的 <category> 元素的 name 屬性中包含 ALTERNATIVE / SELECTED_ALTERNATIVE 值。比如:

      
        
          
            <intent-filter label="Resize Image">
          
        
      
    
      
        
          
            
            
            ...
          
        
      
    
      
        
          
            
            
            <category android:name="android.intent.category.ALTERNATIVE" />
          
        
      
    
      
        
          
            
            
            <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
          
        
      
    
      
        
          
            
            
            ...
          
        
      
    
      
        
          
            </intent-filter>
          
        
      
    

在意圖和意圖過(guò)濾器文章中有更多關(guān)于創(chuàng)建意圖過(guò)濾器的描述。

要了解使用該技術(shù)的一個(gè)例子應(yīng)用程序,可查看 NotePad 范例代碼。

Android開(kāi)發(fā)指南-用戶界面-菜單特性


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 人人爱天天做夜夜爽88 | 亚洲国产精品久久久天堂麻豆 | 免费网站日本永久免费观看 | 亚洲精品一区二区三区四区手机版 | 久草免费在线 | 在线成人国产 | 亚洲国产影院 | 天天操天天射天天色 | 久久这里只有精品23 | 999热在线精品观看全部 | 99国产精品九九视频免费看 | 99久久99久久久99精品齐 | 狠狠色综合久久婷婷 | 色综久久天天综合绕视看 | 97免费视频观看 | 国产精品欧美日韩视频一区 | 91中文字幕在线播放 | 久久人人澡 | 男人的天堂久久香蕉国产 | 天天射天天舔 | 美日韩视频 | 精品在线一区二区三区 | 久久亚洲福利 | 日韩精品视频在线观看免费 | 在线私人影院 | 亚洲精品欧美精品日韩精品 | 午夜激情男女 | 亚洲国产二区 | japanese成人 | 国产精品亚洲一区在线播放 | 在线中文字幕亚洲 | 国产九九热 | 一级国产视频 | 全黄冷激性性视频 | 国产乱仑 | 国产三级日产三级日本三级 | 亚洲精品久久久午夜伊人 | 国产性一交一乱一伦一色一情 | 亚洲a免费 | 亚洲国产一区二区三区综合片 | 国内精品久久久久久久星辰影视 |