Android菜單—Menu

來源:互聯網
上載者:User

標籤:

菜單是常用的使用者介面元素,在Android系統裡提供了3種類型的菜單。

(1)選項菜單(options menu):按裝置上Menu 鍵顯示的菜單。

(2)操作功能表(context menu):長按特定介面view顯示,跟具體的 view 綁定在一起,類似PC上滑鼠右鍵菜單。

(3)子功能表(sub menu):以上兩種菜單都可以加入子功能表,但子功能表不能再嵌套子功能表。

下面我們通過一個例子來示範3種菜單的基本用法。

菜單的XML資源檔放在res/menu目錄下。

optionmenu.xml

1.   <?xml version="1.0" encoding="utf-8"?>

2.   <menu xmlns:android="http://schemas.android.com/apk/res/android">

3.   <item android:id="@+id/optionitem1"

4.   android:icon="@drawable/icon"

5.   android:title="選項1" />

6.   <item android:id="@+id/optionitem2"

7.   android:icon="@drawable/ic_launcher"

8.   android:title="選項2" />

9.   <item android:id="@+id/optionitem3"

10.  android:icon="@drawable/icon"

11.  android:title="子功能表" >

12.  <menu>

13.  <item android:id="@+id/subitem1"

14.  android:title="子功能表項1" />

15.  <item android:id="@+id/subitem2"

16.  android:title="@string/子功能表項2" />

17.  </menu>

18.  </item>

19.  </menu>

在這個菜單資源檔裡,定義了3個功能表項目,id分別為optionitem1、optionitem2和optionitem3。每個功能表項目item有自己的id、title和icon。

第9~18行的optionitem3功能表項目裡除了定義了id、title和icon外,還增加了第12~17行所示的子功能表結構。子功能表的item只有id和title,不能設定icon。

操作功能表資源檔。

contextmenu.xml

1.   <?xml version="1.0" encoding="utf-8"?>

2.   <menu xmlns:android="http://schemas.android.com/apk/res/android">

3.   <item

4.   android:id="@+id/contextitem1"

5.   android:title="操作功能表子項1">

6.   </item>

7.   <item

8.   android:id="@+id/contextitem2"

9.   android:title="操作功能表子項2">

10.  </item>

11.  <item

12.  android:id="@+id/contextitem3"

13.  android:title="操作功能表子項3">

14.  </item>

15.  </menu>

操作功能表的格式和子功能表格式類似,item項沒有icon屬性。

菜單例子的Java原始碼如下。

Mymenu.java

1.   @Override

2.   public void onCreate(Bundle savedInstanceState) { 

3.   super.onCreate(savedInstanceState); 

4.   setContentView(R.layout.main); 

5.   GridView gridview;

6.   String[] titles={"趙1","錢2","張三","李四","王五"};   

7.   int buf=R.drawable.sample;

8.   int[] resIds={buf,buf,buf,buf,buf};

9.   gridview=(GridView)this.findViewById(R.id.gridview);

10.  gridview.setAdapter(new MyAdapter(titles,resIds));

11.  registerForContextMenu(gridview) ;

12.  gridview.setOnItemClickListener(new AdapterView.OnItemClickListener(){

13.  ......});}

14.  @Override

15.  public void onCreateContextMenu(ContextMenu menu,View

    v,ContextMenu.ContextMenuInfo menuInfo){

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

17.  getMenuInflater().inflate(R.menu.contextmenu,menu);

18.  }

19.  @Override 

20.  public boolean onContextItemSelected (MenuItem item) { 

21.  super.onContextItemSelected(item); 

22.  switch (item.getItemId()) { 

23.  case R.id.contextitem1: 

24.  Toast.makeText(this, "操作功能表子項1", Toast.LENGTH_SHORT).show(); 

25.  break; 

26.  case R.id.contextitem2: 

27.  Toast.makeText(this, "操作功能表子項2", Toast.LENGTH_SHORT).show(); 

28.  break; 

29.  case R.id.contextitem3: 

30.  Toast.makeText(this, "操作功能表子項3", Toast.LENGTH_SHORT).show(); 

31.  break; 

32.  default: 

33.  break; 

34.  } 

35.  return  super.onOptionsItemSelected(item);

36.  }

37.  @Override 

38.  public boolean onCreateOptionsMenu(Menu menu) { 

39.  super.onCreateOptionsMenu(menu); 

40.  getMenuInflater().inflate(R.menu.optionmenu, menu); 

41.  return true;

42.  }

43.  @Override

44.  public boolean onOptionsItemSelected(MenuItem item)

45.  {

46.  switch (item.getItemId())

47.  {

48.  case R.id.optionitem1:

49.  Toast.makeText(this, "單擊了選項1", Toast.LENGTH_SHORT).show(); 

50.  return true;

51.  case R.id.optionitem2:

52.  Toast.makeText(this, "單擊了選項2", Toast.LENGTH_SHORT).show(); 

53.  return true;

54.  case R.id.optionitem3:

55.  Toast.makeText(this, "單擊了選項3", Toast.LENGTH_SHORT).show(); 

56.  return true;

57.  case R.id.subitem1:

58.  Toast.makeText(this, "單擊子功能表選項1", Toast.LENGTH_SHORT).show(); 

59.  return true;

60.  case R.id.subitem2:

61.  Toast.makeText(this, "單擊子功能表選項2", Toast.LENGTH_SHORT).show(); 

62.  return true;

63.  default:

64.  return super.onOptionsItemSelected(item);

65.  }}

66.  public class MyAdapter extends BaseAdapter {

67.  ......}}

第11行registerForContextMenu(gridview),我們為gridview註冊了一個操作功能表,當gridview裡的itemview接收到長按事件時就會彈出一個操作功能表。

第14~18行我們重寫了onCreateContextMenu這個建立操作功能表的回調方法。操作功能表每次觸發顯示時都會調用這個方法。

第17行我們使用getMenuInflater().inflate方法裝載菜單資源XML檔案contextmenu到menu對象裡,這個menu對象是由onCreateContextMenu回呼函數傳入的操作功能表對象。

第19~36行的onContextItemSelected方法是當使用者選擇了操作功能表中的選項時系統回調的方法,系統會傳入使用者選擇的MenuItem對象。通過item.getItemId()我們知道使用者選的功能表項目的id號。在這裡我們用toast顯示使用者的選擇資訊。

第37~42行onCreateOptionsMenu是建立選項菜單的回調方法,系統在第一次建立選項菜單時調用該方法。我們重寫了該方法將菜單資源optionmenu載入到選項菜單。

第43~65行是選項菜單的item響應回呼函數,同樣我們通過item.getItemId()擷取選項id號。

運行10-14、圖10-15、圖10-16和圖10-17所示。

 

        

▲圖10-14  選項菜單圖示                        ▲圖10-15  單擊選項2後的圖示

 

      

▲圖10-16  子功能表圖示                                ▲圖10-17  操作功能表圖示

Android菜單—Menu

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.