Android手機專門用一個按鍵“menu“來顯示菜單。
要實現菜單功能,首先要通過方法onCreateOptionMenu來建立菜單,建立方法有兩種:一種是直接匯入有menu的xml檔案,一種是用類Menu的方法直接添加。建立好菜單後,用事件監聽器onOptionItemSelected對能夠觸發的事件進行監聽。
下面這個例子有兩個Activity,分別有上面的兩種方法實現menu,每個menu裡都有事件監聽器進行Activity跳轉和退出。
1.資源檔下的menu檔案res/menu/menu.xml
[java]
view plaincopyprint?
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/about"
- android:title="關於" />
- <item android:id="@+id/exit"
- android:title="退出" />
- </menu>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><br /> <item android:id="@+id/about"<br /> android:title="關於" /><br /> <item android:id="@+id/exit"<br /> android:title="退出" /><br /></menu>
Activity01.java
[java]
view plaincopyprint?
- package com.yarin.android.Examples_04_13;
-
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuInflater;
- import android.view.MenuItem;
-
- public class Activity01 extends Activity
- {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
-
- /*建立menu*/
- public boolean onCreateOptionsMenu(Menu menu)
- {
- //MenuInflater class is used to instantiate menu XML files into Menu objects
- MenuInflater inflater = getMenuInflater();
- //設定menu介面為res/menu/menu.xml
- inflater.inflate(R.menu.menu, menu);
- return true;
- }
-
- /*處理菜單事件*/
- public boolean onOptionsItemSelected(MenuItem item)
- {
- //得到當前選中的MenuItem的ID,
- int item_id = item.getItemId();
-
- switch (item_id)
- {
- case R.id.about:
- /* 建立一個Intent對象 */
- Intent intent = new Intent();
- /* 指定intent要啟動的類 */
- intent.setClass(Activity01.this, Activity02.class);
- /* 啟動一個新的Activity */
- startActivity(intent);
- /* 關閉當前的Activity */
- Activity01.this.finish();
- break;
- case R.id.exit:
- Activity01.this.finish();
- break;
- }
- return true;
- }
- }
package com.yarin.android.Examples_04_13;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.Menu;<br />import android.view.MenuInflater;<br />import android.view.MenuItem;</p><p>public class Activity01 extends Activity<br />{<br />/** Called when the activity is first created. */<br />@Override<br />public void onCreate(Bundle savedInstanceState)<br />{<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />}</p><p>/*建立menu*/<br />public boolean onCreateOptionsMenu(Menu menu)<br />{<br />//MenuInflater class is used to instantiate menu XML files into Menu objects<br />MenuInflater inflater = getMenuInflater();<br />//設定menu介面為res/menu/menu.xml<br />inflater.inflate(R.menu.menu, menu);<br />return true;<br />}</p><p>/*處理菜單事件*/<br />public boolean onOptionsItemSelected(MenuItem item)<br />{<br />//得到當前選中的MenuItem的ID,<br />int item_id = item.getItemId();</p><p>switch (item_id)<br />{<br />case R.id.about:<br />/* 建立一個Intent對象 */<br />Intent intent = new Intent();<br />/* 指定intent要啟動的類 */<br />intent.setClass(Activity01.this, Activity02.class);<br />/* 啟動一個新的Activity */<br />startActivity(intent);<br />/* 關閉當前的Activity */<br />Activity01.this.finish();<br />break;<br />case R.id.exit:<br />Activity01.this.finish();<br />break;<br />}<br />return true;<br />}<br />}<br />
Activity02.java
[java]
view plaincopyprint?
- package com.yarin.android.Examples_04_13;
-
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
-
- public class Activity02 extends Activity
- {
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- /* 設定顯示main2.xml布局 */
- setContentView(R.layout.main2);
- }
-
- /*建立menu*/
- public boolean onCreateOptionsMenu(Menu menu)
- {
- //為menu新增內容
- menu.add(0, 0, 0, R.string.ok);
- menu.add(0, 1, 1, R.string.back);
- return true;
- }
-
- /*處理menu的事件*/
- public boolean onOptionsItemSelected(MenuItem item)
- {
- //得到當前選中的MenuItem的ID,
- int item_id = item.getItemId();
-
- switch (item_id)
- {
- case 0:
- case 1:
- /* 建立一個Intent對象 */
- Intent intent = new Intent();
- /* 指定intent要啟動的類 */
- intent.setClass(Activity02.this, Activity01.class);
- /* 啟動一個新的Activity */
- startActivity(intent);
- /* 關閉當前的Activity */
- Activity02.this.finish();
- break;
- }
- return true;
- }
- }
package com.yarin.android.Examples_04_13;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.Menu;<br />import android.view.MenuItem;</p><p>public class Activity02 extends Activity<br />{<br />public void onCreate(Bundle savedInstanceState)<br />{<br />super.onCreate(savedInstanceState);<br />/* 設定顯示main2.xml布局 */<br />setContentView(R.layout.main2);<br />}</p><p>/*建立menu*/<br />public boolean onCreateOptionsMenu(Menu menu)<br />{<br />//為menu新增內容<br />menu.add(0, 0, 0, R.string.ok);<br />menu.add(0, 1, 1, R.string.back);<br />return true;<br />}</p><p>/*處理menu的事件*/<br />public boolean onOptionsItemSelected(MenuItem item)<br />{<br />//得到當前選中的MenuItem的ID,<br />int item_id = item.getItemId();</p><p>switch (item_id)<br />{<br />case 0:<br />case 1:<br />/* 建立一個Intent對象 */<br />Intent intent = new Intent();<br />/* 指定intent要啟動的類 */<br />intent.setClass(Activity02.this, Activity01.class);<br />/* 啟動一個新的Activity */<br />startActivity(intent);<br />/* 關閉當前的Activity */<br />Activity02.this.finish();<br />break;<br />}<br />return true;<br />}<br />}</p><p>
本例用到了兩個Activity,不要忘記在AndroidManifest.xml中聲明。