一般情況下,開發人員在res/Layout路徑下來定義應用程式的GUI。應用Eclipse
建立一個新項目後,可以看到res/layout中存在一個 預置的main.xml檔案,其
作為程式預設啟動介面。同樣,可以通過這種方式 建立一個靜態Menu,建立
方法參閱下邊的原始碼:
?View Code XML
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/previous"
android:title="@string/previous"
android:enabled="false"
android:icon="@android:drawable/ic_media_previous"/>
<!--these may not be available in next api (level > 3), so be carefull-->
<item
android:id="@+id/play_pause"
android:title="@string/play"
android:icon="@android:drawable/ic_media_play"/>
<item
android:id="@+id/next"
android:title="@string/next"
android:icon="@android:drawable/ic_menu_next"/>
</menu>
在Activity類中調用剛剛建立的Menu,首先將當前的Activity與指定的Menu XML相關聯:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.layout.menu_mainactivity, menu);
return true;
}
實現onOptionsItemSelected方法: (其目的是捕捉到菜單觸發事件後,對具體觸
發的選項作出響應,實際調用的函數包含在各自的case中)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.previous:
previous(); //go to previous song in the playlist
return true;
case R.id.play_pause:
isPlaying() ? pause() : play(); //toggle play/pause
return true;
case R.id.next:
next(); //go to next song in the playlist
return true;
}
return false; //should never happen
}
最後可以通過onPrepareOptionMenu方法初始化Menu Items的屬性:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//set play_pause menu item look
if(isPlaying()) {
menu
.findItem(R.id.play_pause)
.setTitle(R.string.pause)
.setIcon(android.R.drawable.ic_media_pause);
} else {
menu
.findItem(R.id.play_pause)
.setTitle(R.string.play)
.setIcon(android.R.drawable.ic_media_play);
}
return true;
}