多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > UI控件之菜單(Menu)

UI控件之菜單(Menu)

來源:程序員人生   發布時間:2016-07-26 13:13:53 閱讀次數:2519次

(1)概述
本章給大家帶來的是Android中的Menu(菜單),而在Android中的菜單有以下幾種:OptionMenu:選項菜單,android中最多見的菜單,通過Menu鍵來調用SubMenu:子菜單,android中點擊子菜單將彈出1個顯示子菜單項的懸浮框, 子菜單不支持嵌套,即不能包括其他子菜單ContextMenu:上下文菜單,通太長按某個視圖組件后出現的菜單,該組件需注冊上下文菜單 本節我們來依依學習這幾種菜單的用法~
(2)OptionMenu(選項菜單)
1)如何使用OptionMenu?
答:非常簡單,重寫兩個方法就好,其實這兩個方法我們在創建項目的時候就會自動生
成~
他們分別是:
public boolean onCreateOptionsMenu(Menu menu):調用OptionMenu,在這里完成菜單初始化
public boolean onOptionsItemSelected(MenuItem item):菜單項被選中時觸發,這里完成事件處理

固然除上面這兩個方法我們可以重寫外我們還可以重寫這3個方法:

public void onOptionsMenuClosed(Menu menu):菜單關閉會調用該方法

public boolean onPrepareOptionsMenu(Menu menu):選項菜單顯示前會調用該方法, 可在這里進行菜單的調劑(動態加載菜單列表)

public boolean onMenuOpened(int featureId, Menu menu):選項菜單打開以后會調用這個方法而加載菜單的方式有兩種,1種是直接通過編寫菜單XML文件,然后調用:
getMenuInflater().inflate(R.menu.menu_main, menu);加載菜單
或通過代碼動態添加,onCreateOptionsMenu的參數menu,調用add方法添加
菜單,add(菜單項的組號,ID,排序號,標題),另外如果排序號是按添加順序排序的話都填0
便可!

2)使用效果圖
這里寫圖片描述

代碼實現:
MainActivity.java:

public class MainActivity extends Activity { //1.定義不同色彩的菜單項的標識: final private int RED = 110; final private int GREEN = 111; final private int BLUE = 112; final private int YELLOW = 113; final private int GRAY = 114; final private int CYAN = 115; final private int BLACK = 116; private TextView tv_test; private TextView tv_context; private Button btn_show_menu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_test = (TextView) findViewById(R.id.tv_test); tv_context = (TextView) findViewById(R.id.tv_context); btn_show_menu = (Button) findViewById(R.id.btn_show_menu); registerForContextMenu(tv_context); btn_show_menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PopupMenu popup = new PopupMenu(MainActivity.this,btn_show_menu); popup.getMenuInflater().inflate(R.menu.menu_sub, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()){ case R.id.lpig: Toast.makeText(MainActivity.this,"你點了小豬~",Toast.LENGTH_SHORT).show(); break; case R.id.bpig: Toast.makeText(MainActivity.this,"你點了大豬~",Toast.LENGTH_SHORT).show(); break; } return true; } }); popup.show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. menu.add(1, RED, 4, "紅色"); menu.add(1, GREEN, 2, "綠色"); menu.add(1, BLUE, 3, "藍色"); menu.add(1, YELLOW, 1, "黃色"); menu.add(1, GRAY, 5, "灰色"); menu.add(1, CYAN, 6, "藍綠色"); menu.add(1, BLACK, 7, "黑色"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); switch (id) { case RED: tv_test.setTextColor(Color.RED); break; case GREEN: tv_test.setTextColor(Color.GREEN); break; case BLUE: tv_test.setTextColor(Color.BLUE); break; case YELLOW: tv_test.setTextColor(Color.YELLOW); break; case GRAY: tv_test.setTextColor(Color.GRAY); break; case CYAN: tv_test.setTextColor(Color.CYAN); break; case BLACK: tv_test.setTextColor(Color.BLACK); break; } return super.onOptionsItemSelected(item); }

代碼分析:
上述的代碼非常簡單,給大家演示了Android 5.0的中OptionMenu(選項菜單)中動態添加菜單,
和事件處理,根據id判斷用戶點擊的是哪1項,然后履行對應的操作!
另外,有1點要注意的是,選項菜單經過了3個階段的過渡:
在Android 2.3.x或更低版本,由于該階段大部份的機型都是帶有Menu鍵的, 此階段通過點擊Menu鍵彈出菜單:
這里寫圖片描述
而在Android 3.0或更高的版本,則是通過3.0引入的ActionBar中的setting菜單:而在5.0以上的版本則是在ToolBar中的,點擊后出1個溢出式的菜單樣式
另外通過XML方式定義Menu的方式,我們貼個簡單的參考代碼:

<?xml version="1.0" encoding="utf⑻"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/new_game" android:icon="@drawable/ic_new_game" android:title="@string/new_game" android:showAsAction="ifRoom"/> <item android:id="@+id/help" android:icon="@drawable/ic_help" android:title="@string/help" /> </menu>

這里寫圖片描述
而在5.0以上的版本則是在ToolBar中的,點擊后出1個溢出式的菜單樣式
這里寫圖片描述
另外通過XML方式定義Menu的方式,我們貼個簡單的參考代碼:

1. <?xml version="1.0" encoding="utf⑻"?> 2. <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3. <item android:id="@+id/new_game" 4. android:icon="@drawable/ic_new_game" 5. android:title="@string/new_game" 6. android:showAsAction="ifRoom"/> 7. <item android:id="@+id/help" 8. android:icon="@drawable/ic_help" 9. android:title="@string/help" /> 10. </menu>

其他的自行查閱文檔哈~

(3)ContextMenu(上下文菜單)
1開始我們就說了,長按某個View后出現的菜單,我們需要為這個View注冊上下文菜
單!

1)如何使用ContextMenu?
答:使用的流程以下:

Step 1:重寫onCreateContextMenu()方法

Step 2:為view組件注冊上下文菜單,使用registerForContextMenu()方法,參數是View

Step 3:重寫onContextItemSelected()方法為菜單項指定事件監聽器上面的OptionMenu我們使用了Java代碼的方法來完成菜單項的添加,這里我們就用XML文件的 方式來生成我們的CotnextMenu吧,另外關于使用Java代碼來生成菜單還是使用XML來生成菜單, 建議使用后者來定義菜單,這樣可以減少Java代碼的代碼臃腫,而且不用每次都用代碼分配 id,只需修改XML文件便可修改菜單的內容,這樣在1定程度上位程序提供的了更好的解耦,低耦合,高內聚,是吧~

2)使用示例:
運行效果圖:
這里寫圖片描述
實現代碼:
我們先來編寫選項菜單的菜單XML文件:
menu_context.xml:

<?xml version="1.0" encoding="utf⑻"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 定義1組單選按鈕 --> <!-- checkableBehavior的可選值由3個:single設置為單選,all為多選,none為普通選項 --> <group android:checkableBehavior="none"> <item android:id="@+id/blue" android:title="@string/font_blue"/> <item android:id="@+id/green" android:title="@string/font_green"/> <item android:id="@+id/red" android:title="@string/font_red"/> </group> </menu>

接著我們在選項菜單的那個基礎上,添加1個TextView,然后加上下面1些東西:

private TextView tv_context; 2. tv_context = (TextView) findViewById(R.id.tv_context); 3. registerForContextMenu(tv_context); 4. 5. //重寫與ContextMenu相干方法 6. @Override 7. //重寫上下文菜單的創建方法 8. public void onCreateContextMenu(ContextMenu menu, View v, 9. ContextMenu.ContextMenuInfo menuInfo ) { 10. MenuInflater inflator = new MenuInflater(this); 11. inflator.inflate(R.menu.menu_context, menu); 12. super.onCreateContextMenu(menu, v, menuInfo); 13. } 14. 15. //上下文菜單被點擊是觸發該方法 16. @Override 17. public boolean onContextItemSelected(MenuItem item) { 18. switch (item.getItemId()) { 19. case R.id.blue:20. tv_context.setTextColor(Color.BLUE); 21. break; 22. case R.id.green: 23. tv_context.setTextColor(Color.GREEN); 24. break; 25. case R.id.red: 26. tv_context.setTextColor(Color.RED); 27. break; 28. } 29. return true; 30. } 31.

好的,就是那末簡單~可以為多個View設置上下文,switch(v.getId)你懂的~
另外,和等下要講的子菜單1樣,上下文菜單都沒法顯示圖標!

(4)SubMenu(子菜單)
所謂的子菜單只是在<item>中又嵌套了1層<menu>而已
代碼示例:
運行效果圖:
這里寫圖片描述
實現代碼:
編寫子菜單的Menu文件:
menu_sub.xml:

1. <?xml version="1.0" encoding="utf⑻"?> 2. <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3. <item android:id="@+id/submenu" android:title="子菜單使用演示~"> 4. <menu> 5. <group android:checkableBehavior = "none"> 6. <item android:id="@+id/one" android:title = "子菜單1"/> 7. <item android:id="@+id/two" android:title = "子菜單2"/> 8. <item android:id="@+id/three" android:title = "子菜單3"/ > 9. </group> 10. </menu> 11. </item> 12. </menu>

接著我們改下上面上下文菜單的兩個方法的內容,換上下面的代碼:

1. public void onCreateContextMenu(ContextMenu menu, View v, 2. ContextMenu.ContextMenuInfo menuInfo) { 3. //子菜單部份: 4. MenuInflater inflator = new MenuInflater(this); 5. inflator.inflate(R.menu.menu_sub, menu); 6. super.onCreateContextMenu(menu, v, menuInfo); 7. } 8. 9. public boolean onContextItemSelected(MenuItem item) { 10. switch (item.getItemId()) { 11. case R.id.one: 12. Toast.makeText(MainActivity.this,"你點擊了子菜單1",Toast. LENGTH_SHORT).show(); 13. break; 14. case R.id.two: 15. item.setCheckable(true); 16. Toast.makeText(MainActivity.this,"你點擊了子菜單2",Toast. LENGTH_SHORT).show(); 17. break; 18. case R.id.three: 19. Toast.makeText(MainActivity.this,"你點擊了子菜單3",Toast. LENGTH_SHORT).show(); 20. item.setCheckable(true); 21. break; 22. } 23. return true; 24. } 25.

好的,灰常簡單是吧,另外,如果你想在Java代碼中添加子菜單的話,可以調用addSubMenu()
比如:SubMenu file = menu.addSubMenu(“文件”);file還需要addItem添加菜單項哦!

(5)PopupMenu(彈出式菜單)
1個類似于PopupWindow的東東,他可以很方便的在指定View下顯示1個彈出菜單,而且 他的菜單選項可以來自于Menu資源,下面我們寫個簡單的例子來使用下這個東東~使用示例:
運行效果圖:
這里寫圖片描述
實現代碼:
菜單資源文件:
menu_pop.xml:

1. <?xml version="1.0" encoding="utf⑻"?> 2. <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3. <item android:id="@+id/lpig" android:title="小兵" /> 4. <item android:id="@+id/bpig" android:title="大兵" /> 5. </menu>

在布局中添加1個按鈕,然后添加點擊事件:
MainActivity.java:

1. btn_show_menu.setOnClickListener(new View.OnClickListener() { 2. @Override 3. public void onClick(View v) {4. PopupMenu popup = new PopupMenu(MainActivity.this,btn_s how_menu); 5. popup.getMenuInflater().inflate(R.menu.menu_pop, popup. getMenu()); 6. popup.setOnMenuItemClickListener(new PopupMenu.OnMenuIt emClickListener() { 7. @Override 8. public boolean onMenuItemClick(MenuItem item) { 9. switch (item.getItemId()){ 10. case R.id.lpig: 11. Toast.makeText(MainActivity.this,"你點了 小豬~", 12. Toast.LENGTH_SHORT).show(); 13. break; 14. case R.id.bpig: 15. Toast.makeText(MainActivity.this,"你點了 大豬~", 16. Toast.LENGTH_SHORT).show(); 17. break; 18. } 19. return true; 20. } 21. }); 22. popup.show(); 23. } 24. });

非常簡單,又學了1招~~~哇哈哈<完>

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲免费大片 | 成人毛片免费视频播放 | 一区二区三区在线 | 亚洲高清视频免费 | www.av在线播放 | 1000部禁止18观看视频在线看 | 国产欧美亚洲三区久在线观看 | 欧美日韩国产超高清免费看片 | 美女福利视频一区二区 | www.黄免费| 亚洲 欧美 日韩 另类 | 免费看成人国产一区二区三区 | 亚洲色图首页 | 在线播放69热精品视频 | 亚州春色校园另类 | 国产高清精品一级毛片 | 韩国一级做a爰片性色毛片 韩国在线观看免费观看影院 | 亚洲欧洲日产国码二区在线 | 国产精品系列在线 | 91麻豆精品国产综合久久久 | 最近中文字幕免费4 | 亚洲视频在线播放 | 极品色影视 | 亚洲成a人片在线观看播放 亚洲成a人片在线观看精品 | 91亚洲区国产区精品区 | 久久精品一区二区免费看 | 一级做a爱片性色毛片武则天五则 | 欧美亚洲 尤物久久 综合精品 | 亚洲精品第一区二区在线 | 激性欧美激情在线播放16页 | 亚洲精品人成无码中文毛片 | 国产高清吃奶成免费视频网站 | 欧美一区二区三区综合色视频 | 91av久久| 日本一道dvd在线中文字幕 | 国产一区在线播放 | 国产精品毛片无码 | 国产精品成人免费 | 国产码欧美日韩高清综合一区 | 黑人猛交| 国产成人久久精品一区二区三区 |