android 菜单的总结

安卓菜单有三种菜单。

 

选项菜单: 点击系统菜单按钮会触发

上下文菜单:长按屏幕触发

 

子菜单:某一个菜单的下一级菜单

 

具体的描叙:http://blog.csdn.net/zqiang_55/article/details/7038085

 

写的简洁易懂。呵呵,其他的都太复杂了

 

我参考这个思路 写了一个演示代码。

 

 

package cn.wuwenfu.menudemo;


import com.example.menudemo.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Button contextMenuButton;//上下文菜单
    private Button subMenuButton;//子菜单
    private Button optionMenuButton;//选项菜单
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        
        //获得3个按钮的控件
        subMenuButton = (Button)this.findViewById(R.id.submenu_button);
        contextMenuButton = (Button)this.findViewById(R.id.contextmenu_button);
        optionMenuButton = (Button)this.findViewById(R.id.optionmenu_button);
        
        
        
        
    }
    
    
    
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        
        contextMenuButton.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent in = new Intent();
                in.setClass(MainActivity.this, ContextMenuActivity.class);
                MainActivity.this.startActivity(in);
                
            }
        });
        
        subMenuButton.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                
                Intent in = new Intent();
                in.setClass(MainActivity.this, SubMenuActivity.class);
                MainActivity.this.startActivity(in);
                
                
            }
        });
        
        
    }
    
    
    
    
    
    //选项菜单
    //如果触屏的平板则要注意sdk版本,过高会导致看不到菜单的图标
    
    //两种方法:第一种就是代码生成。第二种就是xml文件。
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        
        //add方法参数说明:参数一是分组的id,参数二:菜单的ID(最重要);参数三:菜单的排序,默认值0表示按照添加的顺序显示
        /*menu.add(0, 0, 0, "查看");
        menu.add(0, 1, 0, "修改");
        menu.add(0, 2, 0, "删除");
        
        menu.add(1, 3, 0, "查看");
        menu.add(1, 4, 0, "修改");
        menu.add(1, 5, 0, "删除");
        
        //隐藏分组0
        menu.setGroupVisible(0, false);
        */
        
        //第二种方式
        
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.option_menu, menu);
        
        
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        
        switch (item.getItemId()) {
        /*
         //是代码生成的,则是具体的数字
        case 0:
            Toast.makeText(MainActivity.this, "你点击率查看",
                    Toast.LENGTH_LONG).show();
            
            return true;
        case 1:
            Toast.makeText(MainActivity.this, "你点击率修改",
                    Toast.LENGTH_LONG).show();
            
            return true;
        case 2:
            Toast.makeText(MainActivity.this, "你点击率删除",
                    Toast.LENGTH_LONG).show();
            
            return true;
        case 3:
            Toast.makeText(MainActivity.this, "你点击率查看1",
                    Toast.LENGTH_LONG).show();
            
            return true;
        case 4:
            Toast.makeText(MainActivity.this, "你点击率修改1",
                    Toast.LENGTH_LONG).show();
            
            return true;
        case 5:
            Toast.makeText(MainActivity.this, "你点击率删除1",
                    Toast.LENGTH_LONG).show();
            
            return true;

        */
        
        //上面的是基于add的菜单。下面的则是基于xml菜单
        //由于这里采用的xml生成,id则必须是android:id对应的。
        case R.id.menu1:
            Toast.makeText(MainActivity.this, "菜单1", Toast.LENGTH_LONG).show();
            return true;
        case R.id.menu2:
            Toast.makeText(MainActivity.this, "菜单2", Toast.LENGTH_LONG).show();
            return true;
        case R.id.menu3:
            Toast.makeText(MainActivity.this, "菜单3", Toast.LENGTH_LONG).show();
            return true;
        
        
        }
        
        return false;

    }
    
    
    
    
    
    

}
选项菜单
package cn.wuwenfu.menudemo;

import com.example.menudemo.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class SubMenuActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.submenuactivity);
        
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        int base = Menu.FIRST;
        // 一个menu可以包括多个子菜单
        SubMenu subMenu = menu.addSubMenu(0, base+1, Menu.NONE, "系统设置");
        // 子菜单可以包括多个菜单项
        MenuItem menuitem1 = subMenu.add(base, base+1, base+1, "显示设置");
        subMenu.add(base, base+2, base+2, "网络设置");
        subMenu.add(base, base+3, base+3, "高级设置");
        subMenu.add(base, base+4, base+4, "安全设置");
        
        
        
      
        
        // 显示菜单请返回true
    return true;
    }
    
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        System.out.println("----->"+item.getGroupId());
        
        //这里要先判断组id 再继续判断子菜单
        switch (item.getGroupId()) {
        case 1:
            switch (item.getItemId()) {
            case 2:
                Toast.makeText(SubMenuActivity.this, "显示",
                        Toast.LENGTH_LONG).show();
                
                return true;
            case 3:
                Toast.makeText(SubMenuActivity.this, "网络",
                        Toast.LENGTH_LONG).show();
                
                return true;
            case 4:
                Toast.makeText(SubMenuActivity.this, "高级",
                        Toast.LENGTH_LONG).show();
                
                return true;
            case 5:
                Toast.makeText(SubMenuActivity.this, "安全",
                        Toast.LENGTH_LONG).show();
                
                return true;

            }
            
            
            return false;

        default:
            break;
        }
        
        
        return false;
    }
    
    
    

}
子菜单
package cn.wuwenfu.menudemo;

/*
 * 2014-05-23 16:08
 * 实现的效果:一个listview。
 *  上下文菜单: 删除 修改 查看
 * */
import java.util.ArrayList;
import java.util.HashMap;

import com.example.menudemo.R;

import android.app.Activity;
import android.os.Bundle;

import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ContextMenuActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contextmenuactivity);

        // 获得控件
        ListView list = (ListView) findViewById(R.id.android_list1234);

        // 数据
        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
        for (int i = 0; i < 5; i++) {
            HashMap<String, Object> m = new HashMap<String, Object>();
            m.put("name", "吴文付" + i);//添加不同数据。
            m.put("sex", "男");
            m.put("age", "20");

            listItem.add(m);
        }

        // 适配器
        SimpleAdapter listItemAdapter = new SimpleAdapter(
        // activity
                this,
                // 数据
                listItem,
                // 样式
                R.layout.itemlist,
                // 名称与样式的对应
                new String[] { "name", "sex", "age" }, new int[] { R.id.name,
                        R.id.sex, R.id.age });

        // 将适配器放入控件中,显示
        list.setAdapter(listItemAdapter);

        // 注册上下文菜单

        // 第一种:通过监听事件
        /*
         * list.setOnCreateContextMenuListener( new
         * OnCreateContextMenuListener() {
         * 
         * @Override public void onCreateContextMenu(ContextMenu menu, View
         * arg1, ContextMenuInfo arg2) { // TODO Auto-generated method stub
         * menu.setHeaderTitle("上下文"); menu.add(0, 0, 0, "查看"); menu.add(0, 1,
         * 0, "修改"); menu.add(0, 2, 0, "删除");
         * 
         * } });
         */
        // 第二种注册方法
        registerForContextMenu(list);
    }

    // 上下文菜单,本例会通过长按条目激活上下文菜单
    // 第二种注册方法需要它
    @Override
    public void onCreateContextMenu(ContextMenu menu, View view,
            ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("上下文菜单");
        // 添加菜单项
        menu.add(0, 0, 0, "查看");
        menu.add(0, 1, 0, "修改");
        menu.add(0, 2, 0, "删除");
    }

    // 上下文菜单
    // 菜单单击响应()
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // 获取当前被选择的菜单项的信息
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                .getMenuInfo();
        Log.i("braincol", String.valueOf(info.id));
        System.out.println("-------->" + String.valueOf(info.id));

        // 获得选中的视图对象
        TextView tv = (TextView) info.targetView.findViewById(R.id.name);

        switch (item.getItemId()) {
        case 0:
            // 在这里添加处理代码
            Toast.makeText(ContextMenuActivity.this, "查看" + tv.getText(),
                    Toast.LENGTH_LONG).show();
            break;
        case 1:
            // 在这里添加处理代码
            Toast.makeText(ContextMenuActivity.this, "修改" + tv.getText(),
                    Toast.LENGTH_LONG).show();
            break;
        case 2:
            // 在这里添加处理代码
            Toast.makeText(ContextMenuActivity.this, "删除" + tv.getText(),
                    Toast.LENGTH_LONG).show();
            break;
        }
        return true;
    }

}
上下文菜单

 

工程截图:

 

 

运行效果截图:

 

 

 

 

工程地址:

http://download.csdn.net/detail/douniwan123654/7406031

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2014-05-27 09:30  jsRunner  阅读(298)  评论(0编辑  收藏  举报

导航