找到一本电子书《Android 应用框架原理与程式设计36技》,个人觉得不错,有兴趣的朋友可以上网搜下。下边的代码是跟着书中的实例边学边写的,并在此基础上加上个人的一些注释。由于本人也是初学Android,若有误之处,还望各位指正。
若有和我一样是初学的朋友,建议先看看Activity类与Menu类的文档,对理解下边的代码很有帮助,具体文档位置为:
Activity类 android-sdk-windows-1.5_r3/docs/reference/android/app/Activity.html
Menu类 android-sdk-windows-1.5_r3/docs/reference/android/view/Menu.html
预览图:
下边为ex01.java类:
view plaincopy to clipboardprint?
package com.misoo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class ex01 extends Activity {
/** 给定各菜单项对应ID值,以区别之,能保证这些值不同就行了 */
public static final int ADD_ID = Menu.FIRST;// 添加命令对应ID值
public static final int DELETE_ID = Menu.FIRST + 1;// 删除命令对应ID值
public static final int EXIT_ID = Menu.FIRST + 2;// 退出命令对应ID值
/** 当activity首次被创建时被调用 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);// 根据main.xml的布局来显示
}
/** 只有当Menu菜单首次被显示时会调用此方法 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean b = super.onCreateOptionsMenu(menu);
/**
* menu.add(int groupId, int itemId, int order, CharSequence title)
* groupId为组ID,这里用不到,所以设置成Menu.NONE
* itemId为项ID,当命令被点击时,要区别点击的命令,所以设置以不同的ID
* order为排列次序,值越小排的越前(不能为负数),这里按添加顺序排,所以也设置成Menu.NONE
* title为要显示的命令名称,这里是根据res/values/strings.xml的name名称去取相应的value
* 估计这样处理是为了日后若要更改这些值,就直接在XML里修改,可以不必改动代码
*/
menu.add(Menu.NONE, ADD_ID, Menu.NONE, R.string.menu_add);
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, R.string.menu_delete);
menu.add(Menu.NONE, EXIT_ID, Menu.NONE, R.string.menu_exit);
return b;// 如果返回值不为true,则Menu菜单将不会显示
}
/** 当每次Menu显示时,会调用此方法 此例中没用到*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
/** 当每次Menu关闭时,会调用此方法 此例中没用到*/
@Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
}
/** 当Menu有命令被选择时,会调用此方法 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case ADD_ID:
setTitle("添加");// 将title设置为"添加"
break;
case DELETE_ID:
setTitle("删除");// 将title设置为"删除"
break;
case EXIT_ID:
finish();// 退出程序
break;
}
// 返回false允许正常的菜单处理资源,若返回true,则直接在此毁灭它
return super.onOptionsItemSelected(item);
}
}
package com.misoo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class ex01 extends Activity {
/** 给定各菜单项对应ID值,以区别之,能保证这些值不同就行了 */
public static final int ADD_ID = Menu.FIRST;// 添加命令对应ID值
public static final int DELETE_ID = Menu.FIRST + 1;// 删除命令对应ID值
public static final int EXIT_ID = Menu.FIRST + 2;// 退出命令对应ID值
/** 当activity首次被创建时被调用 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);// 根据main.xml的布局来显示
}
/** 只有当Menu菜单首次被显示时会调用此方法 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean b = super.onCreateOptionsMenu(menu);
/**
* menu.add(int groupId, int itemId, int order, CharSequence title)
* groupId为组ID,这里用不到,所以设置成Menu.NONE
* itemId为项ID,当命令被点击时,要区别点击的命令,所以设置以不同的ID
* order为排列次序,值越小排的越前(不能为负数),这里按添加顺序排,所以也设置成Menu.NONE
* title为要显示的命令名称,这里是根据res/values/strings.xml的name名称去取相应的value
* 估计这样处理是为了日后若要更改这些值,就直接在XML里修改,可以不必改动代码
*/
menu.add(Menu.NONE, ADD_ID, Menu.NONE, R.string.menu_add);
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, R.string.menu_delete);
menu.add(Menu.NONE, EXIT_ID, Menu.NONE, R.string.menu_exit);
return b;// 如果返回值不为true,则Menu菜单将不会显示
}
/** 当每次Menu显示时,会调用此方法 此例中没用到*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
/** 当每次Menu关闭时,会调用此方法 此例中没用到*/
@Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
}
/** 当Menu有命令被选择时,会调用此方法 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case ADD_ID:
setTitle("添加");// 将title设置为"添加"
break;
case DELETE_ID:
setTitle("删除");// 将title设置为"删除"
break;
case EXIT_ID:
finish();// 退出程序
break;
}
// 返回false允许正常的菜单处理资源,若返回true,则直接在此毁灭它
return super.onOptionsItemSelected(item);
}
}
下边为res/values/string.xml
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ex01!</string>
<string name="app_name">ex01</string>
<string name="menu_add">Add Item</string>
<string name="menu_delete">Del Item</string>
<string name="menu_exit">Exit</string>
</resources>