国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

安卓開發(fā)筆記——Menu菜單組件(選項菜單,上下文菜單,子菜單)

2019-11-14 21:06:32
字體:
供稿:網(wǎng)友
安卓開發(fā)筆記——Menu菜單組件(選項菜單,上下文菜單,子菜單)

菜單是用戶界面中最常見的元素之一,使用非常頻繁,在Android中,菜單被分為如下三種,選項菜單(OptionsMenu)、上下文菜單(ContextMenu)和子菜單(SubMenu)。

菜單的實現(xiàn)方式有2種:一種是通過布局文件xml生成菜單,另一種是通過代碼生成。

三種菜單內(nèi)容有點多,不過大體相似,一次性講完吧,本人偏好代碼動態(tài)生成,下面就以代碼為例。

1、選項菜單(OptionsMenu)

先來看下選項菜單的效果圖:

在一個Activity界面中點擊手機Menu鍵,在屏幕下方彈出的菜單就叫選項菜單(OptionsMenu)。

創(chuàng)建一個選項菜單的步驟:1、覆寫Activity的onCreateOptionsMenu(Menu menu)函數(shù)2、調(diào)用menu的add()方法添加菜單項(MenuItem),可以調(diào)用MenuItem的setIcon()方法來為菜單設(shè)置圖標3、當菜單項()被選擇時,我們可以通過覆蓋Activity的onOptionsItemSeleted()方法來響應(yīng)事件

先來了解下主要的方法:

1   public boolean onCreateOptionsMenu(Menu menu)://使用此方法調(diào)用OptionsMenu 。2 3   public boolean onOptionsItemSelected(MenuItem item)://選中菜單項后發(fā)生的動作。4 5   public void onOptionsMenuClosed(Menu menu): //菜單關(guān)閉后發(fā)生的動作。6 7   public boolean onPRepareOptionsMenu(Menu menu)://選項菜單顯示之前onPrepareOptionsMenu方法會被調(diào)用,你可以用此方法來根據(jù)打當時的情況調(diào)整菜單。8 9   public boolean onMenuOpened(int featureId, Menu menu)://單打開后發(fā)生的動作。

下面來看個小Demo,注釋很全。

 1 package com.example.menutest; 2  3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.Menu; 7 import android.view.MenuItem; 8 import android.widget.Toast; 9 10 /**11  * 12  * @author Balla_兔子13  * 用代碼動態(tài)生成菜單(選項菜單)14  *15  */16 public class MainActivity extends Activity {17 18     @Override19     protected void onCreate(Bundle savedInstanceState) {20         super.onCreate(savedInstanceState);21         setContentView(R.layout.activity_main);22     }23     24     @Override25     //onCreateOptionsMenu()此方法只會調(diào)用一次,即第一次顯示的時候會調(diào)用.26     public boolean onCreateOptionsMenu(Menu menu) {27 //        MenuItem item1=menu.add(1, 1, 1, "第一個選項菜單");28 //        item1.setTitle("第一個選項菜單");29 //        item1.setIcon(R.drawable.ic_launcher);30         menu.add(1, 1, 1, "第一個選項菜單");31         menu.add(1, 2, 1, "第二個選項菜單");32         menu.add(1, 3, 1, "第三個選項菜單");33         menu.add(1, 4, 1, "第四個選項菜單");        34         return super.onCreateOptionsMenu(menu);35     }36     37     @Override38     //如果需要更新菜單項.可以在onPrepareOptionsMenu()方法中操作.39     public boolean onPrepareOptionsMenu(Menu menu) {40         Toast.makeText(this, "菜單顯示器前執(zhí)行的方法", Toast.LENGTH_SHORT).show();41         return super.onPrepareOptionsMenu(menu);42     }43     44     @Override45     public void onOptionsMenuClosed(Menu menu) {46         Toast.makeText(this, "菜單關(guān)閉后執(zhí)行的方法", Toast.LENGTH_SHORT).show();47         super.onOptionsMenuClosed(menu);48     }49     50     @Override51     //當菜單被選擇的時候,在OnOptionsItemSelected()方法中實現(xiàn).52     public boolean onOptionsItemSelected(MenuItem item) {53         switch(item.getItemId()){//獲取菜單id54         case 1:55             //可以通過Intent跳轉(zhuǎn)界面56             Intent intent=new Intent(MainActivity.this, HelloWorld.class);57             item.setIntent(intent);58             break;59         case 2:60             Toast.makeText(this, "第二個選項菜單被點擊", Toast.LENGTH_SHORT).show();61             break;62         case 3:63             Toast.makeText(this, "第三個選項菜單被點擊", Toast.LENGTH_SHORT).show();64             break;65         case 4:66             Toast.makeText(this, "第四個選項菜單被點擊", Toast.LENGTH_SHORT).show();67             break;68         }69         return super.onOptionsItemSelected(item);70     }71 72 }

上面例子中,在創(chuàng)建菜單方法onCreateOptionsMenu()中有個add方法,它的返回值是一個MenuItem,我們可以根據(jù)它的返回值來設(shè)置更多選擇,例如菜單圖標等。

來看下它的參數(shù),下面是它對應(yīng)的API文檔中的解釋:參數(shù)1:分組,參數(shù)2:標示符id,參數(shù)3:排序,參數(shù)4:菜單文字

2、上下文菜單

國際慣例,先來看下效果圖:

什么是上下文菜單?

Android 的上下文菜單類似于Windows上的右鍵菜單。當為一個視圖注冊了上下文菜單之后,長按(2 秒左右)這個視圖對象就會彈出一個浮動菜單,即上下文菜單。任何視圖都可以注冊上下文菜單,不過,最常見的是用于列表視圖ListView的item。

創(chuàng)建上下文菜單步驟:

1、 覆寫 Activity 的 onCreateContenxtMenu() 方法,調(diào)用 Menu 的 add 方法添加菜單項(MenuItem)。

2、覆蓋 Activity 的 onContextItemSelected() 方法,響應(yīng)上下文菜單菜單項的單擊事件。

3、調(diào)用 registerForContextMenu() 方法,為視圖注冊上下文菜單。

下面直接上個小Demo演示了,對于ListView組件這里就不再給注釋了,不清楚的朋友可以翻下我以前寫的文章。

 1 package com.example.menutest; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.ContextMenu; 6 import android.view.ContextMenu.ContextMenuInfo; 7 import android.view.Menu; 8 import android.view.MenuItem; 9 import android.view.View;10 import android.widget.ArrayAdapter;11 import android.widget.ListView;12 import android.widget.Toast;13 14 /**15  * 16  * @author Balla_兔子17  * 用代碼動態(tài)生成菜單(上下文菜單)18  *19  */20 public class MainActivity extends Activity  {21     22     private ListView listview;23     private ArrayAdapter<String> adapter;24     private String info[]={"選項1","選項2","選項3","選項4","選項5","選項6"};25 26     @Override27     protected void onCreate(Bundle savedInstanceState) {28         super.onCreate(savedInstanceState);29         setContentView(R.layout.activity_main);30         //創(chuàng)建一個ListView列表31         listview=(ListView) findViewById(R.id.listview);32         adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, info);33         listview.setAdapter(adapter);34 35         36         //給當前View注冊上下文菜單.37         this.registerForContextMenu(listview);38             39     }40     41     @Override42     public void onCreateContextMenu(ContextMenu menu, View v,43             ContextMenuInfo menuInfo) {44             menu.setHeaderTitle("我是上下文菜單");//設(shè)置上下文菜單題目45             menu.setHeaderIcon(R.drawable.ic_launcher);//設(shè)置上下文菜單題目圖標46             menu.add(1, 1, 1, "我是上下文菜單選項1");47             menu.add(1, 2, 1, "我是上下文菜單選項2");48             menu.add(1, 3, 1, "我是上下文菜單選項3");49             menu.add(1, 4, 1, "我是上下文菜單選項4");50     }51     52     @Override53     public boolean onContextItemSelected(MenuItem item) {54         switch(item.getItemId()){55         case 1:56             Toast.makeText(this, "點擊上下文菜單選項1", Toast.LENGTH_SHORT).show();57             break;58         case 2:59             Toast.makeText(this, "點擊上下文菜單選項2", Toast.LENGTH_SHORT).show();60             break;61         case 3:62             Toast.makeText(this, "點擊上下文菜單選項3", Toast.LENGTH_SHORT).show();63             break;64         case 4:65             Toast.makeText(this, "點擊上下文菜單選項4", Toast.LENGTH_SHORT).show();66             break;67         68         }69         return super.onContextItemSelected(item);70     }71     72     @Override73     //關(guān)閉上下文菜單觸發(fā)此方法74     public void onContextMenuClosed(Menu menu) {75         Toast.makeText(this, "關(guān)閉上下文菜單", Toast.LENGTH_SHORT).show();76     }77     78 79     80 81 82 }

3、子菜單

先看下效果圖:

創(chuàng)建子菜單的步驟:1、 覆寫Activity的onCreateOptionsMenu()方法,調(diào)用Menu的addSubMenu()方法來添加子菜單2、 調(diào)用SubMenu的add()方法,添加子菜單項(addSubMenu)3、 覆寫onOptionsItemSelected()方法,響應(yīng)子菜單的單擊事件

  子菜單提供了一種自然的組織菜單項的方式,我們可以通過addSubMenu(int groupId, int itemId, int order, int titleRes)方法非常方便的創(chuàng)建和響應(yīng)子菜單。

代碼和之前創(chuàng)建選項菜單,上下文菜單差不多,直接上代碼了:

 1 package com.example.menutest; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.view.SubMenu; 8 import android.widget.Toast; 9 10 /**11  * 12  * @author Balla_兔子13  * 用代碼動態(tài)生成菜單(子菜單)14  *15  */16 public class MainActivity extends Activity  {17     18 19     @Override20     protected void onCreate(Bundle savedInstanceState) {21         super.onCreate(savedInstanceState);22         setContentView(R.layout.activity_main);23     }24     25     @Override26     public boolean onCreateOptionsMenu(Menu menu) {27         SubMenu s1=menu.addSubMenu(1, 0, 1, "我是菜單1");28         s1.setIcon(R.drawable.ic_launcher);//設(shè)置子菜單圖標29         s1.setHeaderTitle("子菜單");//設(shè)置子菜單標題30         s1.add(1, 1, 1, "我是子菜單1");31         s1.add(1, 2, 1, "我是子菜單2");32         s1.add(1, 3, 1, "我是子菜單3");33         s1.add(1, 4, 1, "我是子菜單4");34         35         SubMenu s2=menu.addSubMenu(2, 0, 1, "我是菜單2");36         s2.setIcon(R.drawable.ic_launcher);37         s2.setHeaderTitle("子菜單");38         s2.add(2, 1, 1, "我是子菜單(1)");39         s2.add(2, 2, 1, "我是子菜單(2)");40         s2.add(2, 3, 1, "我是子菜單(3)");41         s2.add(2, 4, 1, "我是子菜單(4)");42         43         return super.onCreateOptionsMenu(menu);44     }45     46     @Override47     public boolean onOptionsItemSelected(MenuItem item) {48         if(item.getGroupId()==1){//判斷分組49             switch(item.getItemId()){50             case 1:51                 Toast.makeText(MainActivity.this, "菜單1的子菜單1被點擊", Toast.LENGTH_SHORT).show();52                 break;53             case 2:54                 Toast.makeText(MainActivity.this, "菜單1的子菜單2被點擊", Toast.LENGTH_SHORT).show();55                 break;56             case 3:57                 Toast.makeText(MainActivity.this, "菜單1的子菜單3被點擊", Toast.LENGTH_SHORT).show();58                 break;59             case 4:60                 Toast.makeText(MainActivity.this, "菜單1的子菜單4被點擊", Toast.LENGTH_SHORT).show();61                 break;62             63         }64             }else if(item.getGroupId()==2){65                 switch(item.getItemId()){66                 case 1:67                     Toast.makeText(MainActivity.this, "菜單2的子菜單1被點擊", Toast.LENGTH_SHORT).show();68                     break;69                 case 2:70                     Toast.makeText(MainActivity.this, "菜單2的子菜單2被點擊", Toast.LENGTH_SHORT).show();71                     break;72                 case 3:73                     Toast.makeText(MainActivity.this, "菜單2的子菜單3被點擊", Toast.LENGTH_SHORT).show();74                     break;75                 case 4:76                     Toast.makeText(MainActivity.this, "菜單2的子菜單4被點擊", Toast.LENGTH_SHORT).show();77                     break;78                 }79             }80     81         return super.onOptionsItemSelected(item);82     }83 84 }


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安庆市| 霍邱县| 依安县| 金门县| 连城县| 延寿县| 体育| 临洮县| 札达县| 蓬溪县| 平陆县| 大庆市| 鹤壁市| 呈贡县| 夏津县| 万载县| 太康县| 天峨县| 仙居县| 扬州市| 蓬莱市| 安龙县| 松江区| 临沂市| 巧家县| 玉山县| 土默特左旗| 新蔡县| 潮安县| 丹寨县| 乐平市| 新沂市| 临江市| 开封县| 确山县| 耿马| 常山县| 海丰县| 九江县| 柘城县| 岑巩县|