Android实例之建立Menu选单

找到一本电子书《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.xmlname名称去取相应的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.xmlname名称去取相应的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> 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值