博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 菜单的总结
阅读量:5331 次
发布时间:2019-06-14

本文共 9881 字,大约阅读时间需要 32 分钟。

安卓菜单有三种菜单。

 

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

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

 

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

 

具体的描叙: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
> listItem = new ArrayList
>(); for (int i = 0; i < 5; i++) { HashMap
m = new HashMap
(); 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/jsRunner/p/3754410.html

你可能感兴趣的文章
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>