• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    理解Android的菜單

     

    1. 選項(xiàng)菜單:最常規(guī)的菜單,android中把它叫做option menu

    2. 子菜單:android中點(diǎn)擊子菜單將彈出懸浮窗口顯示子菜單項(xiàng)。子菜單不支持嵌套,即子菜單中不能再包括其他子菜單。

    3. 上下文菜單:android中長(zhǎng)按視圖控件后出現(xiàn)的菜單,windows點(diǎn)擊右鍵彈出的菜單即上下文菜單

    4. 圖標(biāo)菜單:這個(gè)比較簡(jiǎn)單,就是帶icon的菜單項(xiàng),需要注意的是子菜單項(xiàng)、上下文菜單項(xiàng)、擴(kuò)展菜單項(xiàng)均無法顯示圖標(biāo)

    5. 選擇菜單(alternative menu):用的比較少,以后單獨(dú)介紹,本文先跳過(其實(shí)是我還沒弄明白啦o(≧v≦)o~~)

    6. 擴(kuò)展菜單:選項(xiàng)菜單最多只能顯示6個(gè)菜單項(xiàng),超過6個(gè)時(shí),第6個(gè)菜單項(xiàng)會(huì)被系統(tǒng)替換為一個(gè)叫“更多”的子菜單,原來顯示不下的菜單項(xiàng)都

    為“更多”菜單的子菜單項(xiàng)。如下圖作 

     

           

     

     

    每個(gè) activity包含一個(gè)菜單,一個(gè)菜單又能包含多個(gè)菜單項(xiàng)和多個(gè)子菜單,子菜單其實(shí)也是菜單(因?yàn)樗鼘?shí)現(xiàn)了Menu接口),因此子菜單也可以包含多個(gè)菜 單項(xiàng)。OnCreateOptionsMenu()和OnOptionsMenuSelected()是activity中提供了兩個(gè)回調(diào)方法,用于創(chuàng)建 菜單項(xiàng)和響應(yīng)菜單項(xiàng)的點(diǎn)擊

     

    1,創(chuàng)建options menu  選項(xiàng)菜單

    [java] view plaincopy

    1. @Override  

    2.     public boolean onCreateOptionsMenu(Menu menu) {  

    3.         //為了兼容以后的版本  

    4.         super.onCreateOptionsMenu(menu);  

    5.           

    6.         //多種方式添加菜單項(xiàng)  

    7.           

    8.         //menu.add("菜單項(xiàng)1");//1,直接指定標(biāo)題,這個(gè)響應(yīng)的時(shí)候我不知道怎么調(diào)用  

    9.         //menu.add(R.string.menuitem2);//2,通過資源指定標(biāo)題  

    10.           

    11.         menu.add(1, Menu.FIRST, 1"菜單項(xiàng)1");//3,顯式指定菜單項(xiàng)的組號(hào),ID , 排序,標(biāo)題  

    12.         menu.add(1, Menu.FIRST+12"菜單項(xiàng)2");  

    13.         menu.add(2, Menu.FIRST+23"菜單項(xiàng)3");  

    14.         menu.add(2, Menu.FIRST+34"菜單項(xiàng)4");  

    15.         menu.add(2, Menu.FIRST+45"菜單項(xiàng)5");  

    16.         menu.add(2, Menu.FIRST+56"菜單項(xiàng)6");//多于6個(gè)將會(huì)被系統(tǒng)以更多字樣替換  

    17.         menu.add(2, Menu.FIRST+67"菜單項(xiàng)7");  

    18.         menu.add(2, Menu.FIRST+78"菜單項(xiàng)8");  

    [java] view plaincopy

    1. return true;//如果希望現(xiàn)實(shí)菜單,返回true  

    響應(yīng)菜單項(xiàng)

    使用的最多方法是重寫activity類的 onOptionsItemSelected(MenuItem)回調(diào)方法,每當(dāng)有菜單項(xiàng)被點(diǎn)擊時(shí),android就會(huì)調(diào)用該方法,并傳入被點(diǎn)擊菜單項(xiàng)。

    以下代碼可作為使用onOptionsItemSelected方法響應(yīng)菜單的模板來使用,這里為了方便起見將菜單ID硬編碼在程序里,你可以使用常量或資源ID來使代碼更健壯

    [java] view plaincopy

    1. @Override  

    2.     public boolean onOptionsItemSelected(MenuItem item) {  

    3.           

    4.         switch(item.getItemId()){  

    5.         case 1:  

    6.             //do something  

    7.             Toast.makeText(this"1", Toast.LENGTH_LONG).show();  

    8.             break;  

    9.         case 2:  

    10.             Toast.makeText(this"2", Toast.LENGTH_LONG).show();  

    11.             break;  

    12.         case 3:  

    13.             Toast.makeText(this"3", Toast.LENGTH_LONG).show();  

    14.             break;  

    15.         case 4:  

    16.             Toast.makeText(this"4", Toast.LENGTH_LONG).show();  

    17.             break;  

    18.         default:  

    19.             return super.onOptionsItemSelected(item);  

    20.         }  

    21.           

    22.         return true;  

    23.     }  

    使用監(jiān)聽器響應(yīng)菜單項(xiàng)

    雖然上邊方法是推薦使用的方法,android還是提供了類似java swing的監(jiān)聽器方式來響應(yīng)菜單。使用監(jiān)聽器的方式分為兩步:

     

    [java] view plaincopy

    1. //第一步:為菜單項(xiàng)注冊(cè)監(jiān)聽器  

    2. menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());  

    3. //第二步:創(chuàng)建監(jiān)聽器類  

    4. class MyMenuItemClickListener implements OnMenuItemClickListener {  

    5.     @Override  

    6.     publicboolean onMenuItemClick(MenuItem item) {  

    7.     switch(){  

    8.     // do something here...  

    9.     }  

    10.          

    11.     return true;    //finish handling  

    12.     }  

    13. }  


     

    該方法先于onOptionsItemSelected執(zhí)行

     

    [java] view plaincopy

    1. <h1 style="font-family: verdana; "><a name="t4"></a>2,子菜單Sub Menu</h1><span style="font-family: verdana; ">Android支持子菜單,你可以通過addSubMenu</span><span style="font-family: verdana; ">(int groupId, int itemId, int order, int titleRes)方法非常方便的創(chuàng)建和響應(yīng)子菜單。</span>  

     

    [java] view plaincopy

    1. @Override  

    2.     public boolean onCreateOptionsMenu(Menu menu) {  

    3.         //為了兼容以后的版本  

    4.         super.onCreateOptionsMenu(menu);  

    5.                   

    6.         //添加子菜單  

    7.         //一個(gè)菜單可以有多個(gè)子菜單  

    8.                           menu.addSubMenu(1, Menu.FIRST, 1"系統(tǒng)設(shè)置" );  

    9.         SubMenu subMenu = menu.addSubMenu(1, Menu.FIRST+12"網(wǎng)絡(luò)設(shè)置" );//子菜單支持圖標(biāo)  

    10.         subMenu.setIcon(R.drawable.ic_launcher);  

    11.           

    12.         MenuItem menuItem = subMenu.add(2, Menu.FIRST+2, Menu.NONE, "菜單項(xiàng)1");//子菜單項(xiàng)不支持顯示圖標(biāo)  

    13.         //menuItem.setIcon(R.drawable.ic_launcher);  

    14.         subMenu.add(2, Menu.FIRST+3, Menu.NONE, "菜單項(xiàng)2");  

    15.         subMenu.add(2, Menu.FIRST+4, Menu.NONE, "菜單項(xiàng)3");  

    16.         subMenu.add(2, Menu.FIRST+5, Menu.NONE, "菜單項(xiàng)4");  

    17.           

    18.         return true;//如果希望現(xiàn)實(shí)菜單,返回true  

    19.     }  

      
     

    上面的代碼演示了如何創(chuàng)建子菜單,其菜單項(xiàng)的響應(yīng)其實(shí)就是普通菜單項(xiàng)的響應(yīng)

     

     

    3,圖標(biāo)菜單Icon Menu

    Android支持在菜單上顯示各種各樣的圖標(biāo),這一點(diǎn)我們?cè)谏厦鎰?chuàng)建子菜單時(shí)已經(jīng)用到了

    [java] view plaincopy

    1. SubMenu subMenu = menu.addSubMenu(1, Menu.FIRST+12"網(wǎng)絡(luò)設(shè)置" );//子菜單支持圖標(biāo)  

    2. subMenu.setIcon(R.drawable.ic_launcher);  

    Android中并不是所謂的菜單項(xiàng)都能加上圖標(biāo),以下菜單項(xiàng)都是不可以的(這并不意味著程序會(huì)報(bào)錯(cuò),而是運(yùn)行時(shí)圖標(biāo)得不到顯示):

    • 擴(kuò)展的菜單項(xiàng)。

    • 子菜單的菜單項(xiàng)

    • 上下文菜單的菜單項(xiàng)

    4,ContextMenu簡(jiǎn)介

    在Windows中,我們已經(jīng)習(xí)慣了在文件上單擊右鍵來執(zhí)行“打開”、“重名名”、“剪切”、“刪除”等操作,這個(gè)右鍵彈出的菜單就是上下文菜單.

    android是通過長(zhǎng)按某個(gè)視圖元素來彈出上下文菜單的.

    上下 文菜單與Options Menu最大的不同在于,Options Menu的擁有者是Activity,而上下文菜單的擁有者是Activity中的View。每個(gè)Activity有且只有一個(gè)Options Menu,它為整個(gè)Activity服務(wù)。而一個(gè)Activity往往有多個(gè)View,并不是每個(gè)View都有上下文菜單,這就需要我們顯示地通過

    registerForContextMenu(Viewview)來指定。

     

     

    下面給出一個(gè)demo演示如何創(chuàng)建和響應(yīng)上下文菜單:

    1.在activity的onCreate(...)方法中為一個(gè)view注冊(cè)上下文菜單

    2.在onCreateContextMenuInfo(...)中生成上下文菜單。

    3.在onContextItemSelected(...)中響應(yīng)上下文菜單項(xiàng)。

     
     

     

    [java] view plaincopy

    1. public class MenuDemoActivity extends Activity {  

    2.     private ListView listView;   

    3.     @Override  

    4.     public void onCreate(Bundle savedInstanceState) {  

    5.         super.onCreate(savedInstanceState);  

    6.         setContentView(R.layout.main);  

    7.         initView();//做一些初始化工作  

    8.     }  

    9.   

    10.     private void initView() {  

    11.         listView = (ListView) this.findViewById(R.id.listview);  

    12.         listView.setAdapter(new MyAdapter());  

    13.         this.registerForContextMenu(listView);//1 為所有列表項(xiàng)注冊(cè)上下文菜單,注意和響應(yīng)事件不一樣  

    14.           

    15.           

    16.     }  

    17.     //給ListView提供一些數(shù)據(jù)  

    18.     private class MyAdapter extends BaseAdapter{  

    19.   

    20.         public int getCount() {  

    21.               

    22.             return 5;  

    23.         }  

    24.   

    25.         public Object getItem(int position) {  

    26.             // TODO Auto-generated method stub  

    27.             return null;  

    28.         }  

    29.   

    30.         public long getItemId(int position) {  

    31.             // TODO Auto-generated method stub  

    32.             return 0;  

    33.         }  

    34.   

    35.         public View getView(int position, View convertView, ViewGroup parent) {  

    36.             TextView tv = new TextView(MenuDemoActivity.this);  

    37.             tv.setText("文件"+position);  

    38.             return tv;  

    39.         }  

    40.           

    41.     }  

    42.       

    43.     @Override  

    44.     //2 創(chuàng)建上下文菜單  

    45.     public void onCreateContextMenu(ContextMenu menu, View v,  

    46.             ContextMenuInfo menuInfo) {  

    47.           

    48.         super.onCreateContextMenu(menu, v, menuInfo);  

    49.         menu.setHeaderTitle("文件操作");  

    50.         menu.add(1, Menu.FIRST, Menu.NONE, "發(fā)送");  

    51.         menu.add(1, Menu.FIRST+1, Menu.NONE, "標(biāo)記為重要");  

    52.         menu.add(1, Menu.FIRST+2, Menu.NONE, "重命名");  

    53.         menu.add(1, Menu.FIRST+3, Menu.NONE, "刪除");  

    54.     }  

    55.       

    56.     @Override  

    57.     //3 響應(yīng)上下文菜單  

    58.     public boolean onContextItemSelected(MenuItem item) {  

    59.         switch(item.getItemId()){  

    60.         case 1:  

    61.             Toast.makeText(this"發(fā)送"1).show();  

    62.             break;  

    63.         case 2:  

    64.             Toast.makeText(this"標(biāo)記為重要"1).show();  

    65.             break;  

    66.         case 3:  

    67.             Toast.makeText(this"重命名"1).show();  

    68.             break;  

    69.         case 4:  

    70.             Toast.makeText(this"刪除"1).show();  

    71.             break;  

    72.         default:  

    73.               

    74.             return super.onContextItemSelected(item);  

    75.         }  

    76.         return true;  

    77.     }  

    78. }  

    79.       

    80.       

    運(yùn)行程序,多次調(diào)出上下文菜單,注意LogCat的輸出,onCreateContextMenu每一次都被調(diào)用了。

     

    穩(wěn)定

    產(chǎn)品高可用性高并發(fā)

    貼心

    項(xiàng)目群及時(shí)溝通

    專業(yè)

    產(chǎn)品經(jīng)理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽(yù)

    堅(jiān)持

    10年專注高端品質(zhì)開發(fā)
    • 返回頂部
    日本精品αv中文字幕| 2021国内精品久久久久精免费| 日韩a级毛片免费视频| 国产精品久久精品视| 精品毛片乱码1区2区3区| 精品久久久久久婷婷| 91精品国产91久久久久久青草| 亚洲日本精品一区二区| 久久国产乱子精品免费女| 99精品久久久久中文字幕| 久久99精品国产麻豆蜜芽| 亚洲一级Av无码毛片久久精品| 日韩人妻系列无码专区| 日韩精品福利在线| 亚洲国产日韩综合久久精品| 日韩中文字幕在线不卡| 国产AV一区二区精品凹凸| 国产成人综合久久精品免费| 国产精品视频2020| 日韩加勒比一本无码精品| 精品三级内地国产在线观看| 国产精品卡一卡二卡三 | 亚洲AV日韩AV高潮无码专区| 国产在线精品美女观看| 国产精品久久久久久亚洲小说| 在线观看精品国产福利片100| 国产精品资源一区二区| 国产精品久免费的黄网站| 国产成人精品无码专区| 日韩少妇无码一区二区三区 | 国产日韩精品视频一区二区三区| 亚洲无码日韩精品第一页| 久久久无码精品亚洲日韩蜜桃| 日韩中文字幕精品免费一区| 日韩免费视频播播| 成人精品视频在线观看| 国产精品成人国产乱一区| 国产精品美女久久久网AV| 久久久久久极精品久久久| 亚洲国产一二三精品无码| 日韩精品成人一区二区三区|