Android 創建簡單的菜單 一:上下文菜單: 1.在 res 下創建菜單項資源文夾 menu app->右擊res->new->android resourse directory->resourse type->menu 2.編寫xml代碼(菜單代碼) 進入Text下編寫代碼 代碼(隨便的一段 ...
Android 創建簡單的菜單
一:上下文菜單:
1.在 res 下創建菜單項資源文夾 menu
app->右擊res->new->android resourse directory->resourse type->menu
2.編寫xml代碼(菜單代碼)
進入Text下編寫代碼
代碼(隨便的一段代碼):

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.a82037.cx06.CTENUActivity"> <group android:checkableBehavior="single"> <item android:id="@+id/apple" android:title="蘋果"/> <item android:id="@+id/banana" android:title="香蕉"/> <item android:id="@+id/pear" android:title="梨"/> <item android:id="@+id/pitch" android:title="桃子"/> </group> </menu>一段菜單代碼
對應的Java代碼:

package com.example.a82037.cx06; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; public class CTENUActivity extends Activity { TextView tv1; Button bt1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ctenu); tv1=findViewById(R.id.tv1); bt1=findViewById(R.id.bt1); registerForContextMenu(bt1); } public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo){ getMenuInflater().inflate(R.menu.ctmenu,menu); } public boolean onContextItemSelected(MenuItem item){ int id=item.getItemId(); if(id==R.id.apple){ tv1.setText("您選擇了蘋果"); return true; }else if(id==R.id.banana){ tv1.setText("您選擇了香蕉"); return true; }else if(id==R.id.pear){ tv1.setText("您選擇了梨"); return true; }else if(id==R.id.pitch){ tv1.setText("您選擇了桃子"); return true; } return super.onContextItemSelected(item); } }對應的Java代碼
3.說明:
我用了一個TextView來顯示內容;按鈕來實現長按出現菜單(這個按鈕可以是其他東西,比如TextView,然後在裡面加點字,就實現了長按文字出現菜單);
二:功能菜單及其子菜單:
代碼:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.a82037.cx06.OPMENUActivity"> <item android:id="@+id/deptmenu1" android:title="電腦系"> <menu> <item android:id="@+id/mojormenu1" android:title="電腦應用"/> <item android:id="@+id/mojrmwnu2" android:title="軟體技術"/> </menu> </item> <item android:id="@+id/deptmenu2" android:title="電子商務"/> <item android:id="@+id/deptmenu3" android:title="信息管理" /> </menu>菜單代碼2

package com.example.a82037.cx06; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class OPMENUActivity extends Activity { TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_opmenu); tv1=findViewById(R.id.tv1); } public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.opmenu,menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ int id=item.getItemId(); if(id==R.id.mojormenu1){ tv1.setText("您選擇了電腦系電腦應用專業"); return true; }else if(id==R.id.mojrmwnu2){ tv1.setText("您選擇了電腦系軟體技術專業"); return true; } return super.onOptionsItemSelected(item); } }對應的Java代碼2
這個目錄是點擊菜單(傳統安卓三大金剛鍵的最左邊那個)就會有的,TextView來顯示所選內容;
三:動態菜單:
代碼:動態菜單,內容都在java代碼里寫,所以xml就很簡單

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.a82037.cx06.OPMENUActivity"> </menu>菜單代碼3

package com.example.a82037.cx06; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class POPActivity extends Activity { TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pop); tv1=findViewById(R.id.tv1); } public boolean onPrepareOptionsMenu(Menu menu){ String currentext=tv1.getText().toString(); if("軟體技術".equals(currentext)){ menu.clear(); menu.add(0,501,1,"軟體1班"); menu.add(0,502,2,"軟體2班"); menu.add(0,503,3,"軟體3班"); menu.add(0,504,4,"轉到電腦應用菜單"); } if("電腦應用".equals(currentext)){ menu.clear(); menu.add(0,601,1,"計應1班"); menu.add(0,602,2,"計應2班"); menu.add(0,603,3,"轉到軟體技術菜單"); } return super.onPrepareOptionsMenu(menu); } public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.po,menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ int id=item.getItemId(); if(id==504){ tv1.setText("電腦應用"); return true; }else if(id==603){ tv1.setText("軟體技術"); return true; } return super.onOptionsItemSelected(item); } }對應java代碼3
四:一些小東西:

1. 菜單 (1) 使用xml定義Menu 在Android工程目錄下的res包下,右鍵選擇New菜單項下的Android resource directory,並以menu命名文件夾的名字;右鍵menu文件夾,選擇Menu resource file選項,創建main_menu.xml文件,菜單資源文件就創建在res/menu目錄中。 菜單資源文件必須使用<menu>標簽作為根節點。除了<menu>標簽外,還有另外兩個標簽用於設置菜單項和分組,這兩個標簽是<item>和<group>。 <menu>標簽沒有任何屬性,但可以嵌套在<item>標簽中,表示子菜單的形式。不過<item>標簽中不能再嵌入<item>標簽。 (2)<item>標簽的屬性含義如下: Id:表示菜單項的資源ID menuCategory:同種菜單項的種類。該屬性可取4個值:container、system、secondary和alternative。通過menuCategroy屬性可以控制菜單項的位置。例如將屬性設為system,表示該菜單項是系統菜單,應放在其他種類菜單項的後面。 orderInCategor:同種類菜單的排列順序。該屬性需要設置一個整數值。例如 menuCategory屬性值都為system的3個菜單項(item1、item2和item3)。將這3個菜單項的orderInCategory屬性值設為3、2、1,那麼item3會顯示在最前面,而item1會顯示在最後面。 title:菜單項標題(菜單項顯示的文本) titleCondensed:菜單項的短標題。當菜單項標題太長時會顯示該屬性值 icon:菜單項圖標資源ID alphabeticShortcut:菜單項的字母快捷鍵 numericShortcut:菜單項的數字快捷鍵 checkable:表示菜單項是否帶覆選框。該屬性可設計為true或false checked:如果菜單項帶覆選框(checkable屬性為true),該屬性表示覆選框預設狀態是否被選中。可設置的值為true或false visible:菜單項預設狀態是否可視 enable:菜單項預設狀態是否被激活 (3)<group>標簽的屬性含義如下: id:表示菜單組的ID menuCategory:與<item>標簽的同名屬性含義相同。只是作用域為菜單組 orderInCategory:與<item>標簽的同名屬性含義相同。只是作用域為菜單組 checkableBehavior:設置該組所有菜單項上顯示的選擇組件(CheckBox或Radio Button)。如果將該屬性值設為all,顯示CheckBox組件;如果設為single,顯示Radio Button組件;如果設為none,顯示正常的菜單項(不顯示任何選擇組件)。all(non-exclusive/checkboxes),single(exclusive/radiobuttons). visible:表示當前組中所有菜單項是否顯示。該屬性可設置的值是true或false enable:表示當前組中所有菜單項是否被激活。該屬性可設置的值是true或false 2. 功能菜單 options menu 按Menu鍵就會顯示,用於當前的Activity。 它包括兩種菜單項: 因為options menu在屏幕底部最多只能顯示6個菜單項,這些菜單項稱為icon menu,icon menu只支持文字(title) 以及icon,可以設置快捷鍵,不支持checkbox以及radio控制項,所以不能設置checkable選項。 而多於6的菜單項會以“more” icon menu來調出,稱為expanded menu。它不支持icon,其他的特性都和icon menu一樣! 在Activity裡面,一般通過以下函數來使用options menu: Activity::onCreateOptionsMenu (Menu menu) 創建options menu,這個函數只會在menu第一次顯示時調用。 Activity::onPrepareOptionsMenu (Menu menu) 更新改變options menu的內容,這個函數會在menu每次顯示時調用。 Activity::onOptionsItemSelected (MenuItem item) 處理選中的菜單項。 3. 上下文菜單 context menu 要在相應的view上按幾秒後才顯示的,用於view,跟某個具體的view綁定在一起。這類型的菜單不支持icon和快捷鍵! 在Activity裡面,一般通過以下函數來使用context menu: Activity::registerForContextMenu(View view) 為某個view註冊context menu,一般在Activity::onCreate裡面調用。 Activity::onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 創建context menu,和options menu不同,context meun每次顯示時都會調用這個函數。 Activity::onContextItemSelected(MenuItem item) 處理選中的菜單項。 4. 子菜單 以上兩種menu(功能菜單和上下文菜單)都可以加入子菜單,但子菜單不能嵌套子菜單,這意味著在Android系統,菜單隻有兩層,設計時需要註意的!同時子菜單不支持icon(圖標)。 5. 動態菜單 動態菜單就是根據不同的界面有不同的菜單。這時候就不再直接在xml里先定義好了,要在代碼中動態添加菜單項。 在android中創建菜單menu時需要重寫Activity的onCreateOptionsMenu(Menumenu)方法,在這個方法中實現菜單xml的關聯。這個方法只在第一次創建的時候調用一次,所以如果之後想對menu進行動態的修改,那麼就不能用它了。這時,就要用到onPrepareOptionsMenu(Menumenu)方法。 onPrepareOptionsMenu與onCreateOptionsMenu不同的是,他在每次按下menu硬鍵之前會被調用,所以可以在這裡動態的改變menu。 代碼中添加菜單項的方法:menu.add(groupId, itemId, order, title) groupld 這個菜單的組別 itemid 是用來獲取這個指定菜單項的 order就是這個組別的第幾項,0為第一項 title是顯示的標題這個不是代碼!
我自己的一些感悟:{
一級菜單:(用html形式類似一下)
<menu>
<item>電腦系</item>
<item>藝術與設計系</item>
</menu>
二級菜單:(用html形式類似一下)
<menu>
<item>電腦系
<menu>
<item>軟體技術專業</item>
<item>電子商務專業</item>
</menu>
</item>
<item>藝術與設計系</item>
</menu>
}{
實現菜單的三個方法

//初始化菜單 必須要 public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.po,menu); return true; } //添加、更改 菜單 可以不要 public boolean onPrepareOptionsMenu(Menu menu){ String currentext=tv1.getText().toString(); if("軟體技術".equals(currentext)){ menu.clear(); //清空菜單 menu.add(0,501,1,"軟體1班"); menu.add(0,502,2,"軟體2班"); menu.add(0,503,3,"軟體3班"); menu.add(0,504,4,"轉到電腦應用菜單"); } if("電腦應用".equals(currentext)){ menu.clear(); menu.add(0,601,1,"計應1班"); menu.add(0,602,2,"計應2班"); menu.add(0,603,3,"轉到軟體技術菜單"); } return super.onPrepareOptionsMenu(menu); } //選擇菜單後的動作並關閉菜單 必須要 public boolean onOptionsItemSelected(MenuItem item){ int id=item.getItemId(); if(id==504){ tv1.setText("電腦應用"); return true; }else if(id==603){ tv1.setText("軟體技術"); return true; } return super.onOptionsItemSelected(item); } }關於 菜單代碼3的一些註釋
裡面menu.add(int,int,int,String);參數的意思
第一個int類型的group ID參數,代表的是組概念,你可以將幾個菜單項歸為一組,以便更好的以組的方式管理你的菜單按鈕。必須有,但像菜單代碼3一樣,可以一樣。
第二個int類型的item ID參數,代表的是項目編號。這個參數非常重要,一個item ID對應一個menu中的選項。在後面使用菜單的時候,就靠這個item ID來判斷你使用的是哪個選項。這個必須有且每個item的ID不能相同。
第三個int類型的order ID參數,代表的是菜單項的顯示順序。預設是0,表示菜單的顯示順序就是按照add的顯示順序來顯示。
第四個String類型的title參數,表示選項中顯示的文字。
}{
敲完xml代碼後,可以轉到可視化界面看看,對應一下代碼,可以很快就知道怎樣可視化編輯菜單。
}