android menu
android的菜单有三种:
Options Menu
当用户按下menu button按钮时显示的菜单
Context Menu
当用户长久按住屏幕,即被注册显示上下文菜单的视图时显示的菜单
Submenu
当用户按下一个菜单的某个选项时弹出的子菜单
By default, every Activity supports an options menu of actions or options. You can add items to this menu and handle clicks on your additions. The easiest way of adding menu items is inflating an XML file into the Menu
via MenuInflater
. The easiest way of attaching code to clicks is via onOptionsItemSelected(MenuItem)
and onContextItemSelected(MenuItem)
.
第一步:编写main.xml文件

1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <TextView android:id="@+id/TextView01"
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello" />
11
12 </LinearLayout>
第二步:编写layoutmenu01.java文件

1 package cn.edu.zwu.tel;
2
3 import android.app.Activity;
4 import android.graphics.Color;
5 import android.os.Bundle;
6 import android.view.ContextMenu;
7 import android.view.Menu;
8 import android.view.MenuItem;
9 import android.view.View;
10 import android.view.ContextMenu.ContextMenuInfo;
11 import android.widget.TextView;
12
13 public class LayoutMenu01Activity extends Activity {
14 private static final int ITME1 = Menu.FIRST;
15 private static final int ITME2 = Menu.FIRST+1;
16 private static final int ITME3 = Menu.FIRST+2;
17 private TextView myTV;
18
19 public void onCreate(Bundle savedInstanceState)
20 {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.main);
23 myTV = (TextView)findViewById(R.id.TextView01);
24 registerForContextMenu(myTV);
25 }
26 //ContextMenu当用户长久按住屏幕,即被注册显示上下文菜单的视图时显示的菜单
27 @Override
28 public void onCreateContextMenu(ContextMenu menu, View v,
29 ContextMenuInfo menuInfo) {
30 menu.add(0, ITME1, 0, "红色背景");
31 menu.add(0, ITME2, 0, "绿色背景");
32 menu.add(0, ITME3, 0, "白色背景");
33 }
34 //选择
35 @Override
36 public boolean onContextItemSelected(MenuItem item) {
37 switch (item.getItemId()) {
38 case ITME1:
39 myTV.setBackgroundColor(Color.RED);
40 break;
41 case ITME2:
42 myTV.setBackgroundColor(Color.GREEN);
43 break;
44 case ITME3:
45 myTV.setBackgroundColor(Color.WHITE);
46 break;
47 }
48 return true;
49 }
50 }
效果图:
还有一种写法:main.xml文件没变,

1 package cn.edu.zwu.tel;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.ContextMenu;
6 import android.view.MenuInflater;
7 import android.view.MenuItem;
8 import android.view.View;
9 import android.view.ContextMenu.ContextMenuInfo;
10 import android.widget.TextView;
11
12 public class LayoutMenu02Activity extends Activity {
13 /** Called when the activity is first created. */
14 TextView LabelView = null;
15 @Override
16 public void onCreate(Bundle savedInstanceState)
17 {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.main);
20 LabelView = (TextView)findViewById(R.id.label);
21 registerForContextMenu(LabelView);
22 }
23 //ContextMenu当用户长久按住屏幕,即被注册显示上下文菜单的视图时显示的菜单
24 @Override
25 public void onCreateContextMenu(ContextMenu menu,
26 View v, ContextMenuInfo menuInfo)
27 {
28
29 MenuInflater inflater = getMenuInflater();
30 inflater.inflate(R.menu.context_menu, menu);
31 }
32
33 @Override
34 public boolean onContextItemSelected(MenuItem item)
35 {
36 switch(item.getItemId()){
37 case R.id.contextMenu1:
38 LabelView.setText("菜单子项1");
39 return true;
40 case R.id.contextMenu2:
41 LabelView.setText("菜单子项2");
42 return true;
43 case R.id.contextMenu3:
44 LabelView.setText("菜单子项3");
45 return true;
46 }
47 return false;
48 }
49
50 }
还有的是用Options Menu的方法实现:
主要代码是

1 /*创建menu*/
2 public boolean onCreateOptionsMenu(Menu menu)
3 {
4 MenuInflater inflater = getMenuInflater();
5 //设置menu界面为res/menu/menu.xml
6 inflater.inflate(R.menu.menu, menu);
7 return true;
8 }
9
10 /*处理菜单事件*/
11 public boolean onOptionsItemSelected(MenuItem item)
12 {
13 //得到当前选中的MenuItem的ID,
14 int item_id = item.getItemId();
15
16 switch (item_id)
17 {
18 case R.id.about:
19 /* 新建一个Intent对象 */
20 Intent intent = new Intent();
21 /* 指定intent要启动的类 */
22 intent.setClass(Activity01.this, Activity02.class);
23 /* 启动一个新的Activity */
24 startActivity(intent);
25 /* 关闭当前的Activity */
26 Activity01.this.finish();
27 break;
28 case R.id.exit:
29 Activity01.this.finish();
30 break;
31 }
32 return true;
33 }
posted on 2012-02-27 19:46 forrest001 阅读(996) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架