Android平台下所提供的菜单大体上可分为三类:选项菜单、上下文菜单和子菜单。
当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单。但这个功能需要开发人员编程来实现的,如果在开发应用程序时没有实现该功能,那么程序运行时按下手机的meun键是不会起作用的。
这里就先学习 选项菜单OptionsMenus
创建选项菜单有两种方式
一、xml文件静态创建
7 package information;
8
9 import com.example.allcode.R;
10
11 import android.app.Activity;
12 import android.content.Intent;
13 import android.os.Bundle;
14 import android.view.Menu;
15 import android.view.MenuItem;
16 import android.widget.Toast;
17
18 public class OptionMenus_text extends Activity{
19 @Override
20 protected void onCreate(Bundle savedInstanceState) {
21 // TODO Auto-generated method stub
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.optionmenus);
24
25 }
26
27
28 @Override
29 public boolean onCreateOptionsMenu(Menu menu) {
30 // TODO Auto-generated method stub
31 //一、xml的形式静态添加菜单项
32 getMenuInflater().inflate(R.menu.main,menu);
33
34 return true;
35
36 }
37
38 //点击事件
39
40 @Override
41 public boolean onOptionsItemSelected(MenuItem item) {
42 // TODO Auto-generated method stub
43 //根据菜单项id执行响应事件
44 switch (item.getItemId()) {
45 //静态菜单 判断Id
46 case R.id.action_menu_1:
47 Toast.makeText(OptionMenus_text.this, "点击了菜单一", 1).show();
48 break;
49 case R.id.action_menu_2:
50 Toast.makeText(OptionMenus_text.this, "点击了菜单二", 1).show();
51
52
53
54 default:
55 break;
56 }
57
58 return super.onOptionsItemSelected(item);
59
60 }
61 }
32 getMenuInflater().inflate(R.menu.main,menu);
看这一行代码,
我们找到其对应的文件
main.xml文件代码如下:
1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
2
3 <item
4 android:id="@+id/action_menu_1"
5 android:orderInCategory="100"
6 android:showAsAction="never"
7 android:title="菜单一"/>
8 <item
9 android:id="@+id/action_menu_2"
10 android:orderInCategory="100"
11 android:showAsAction="never"
12 android:title="菜单二"/>
13
14 </menu>
可以看到两个菜单项,看下菜单项的各个属性:
1、 android:id=
是菜单项id
2、android:orderInCategory=
是菜单项优先级,值越大,优先级越多,当菜单项过多时,可隐藏在折叠菜单中
3、android:showAsAction=
原来是特定版本用到的,当你的应用程序目标设为蜂巢平台(即 Android 3.0)时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角, 对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。 这个属性可接受的值有:
1.alaways:这个值会使菜单项一直显示在ActionBar上。
2.ifRoom:如果有足够的空间,这个值会使菜单显示在ActionBar上。
3.never:这个值菜单永远不会出现在ActionBar是。
4.withText:这个值使菜单和它的图标,菜单文本一起显示。
4、android:title=
是菜单项名字
二、动态创建选项菜单
1 package information; 2 3 import com.example.allcode.R; 4 5 import android.app.Activity; 6 import android.content.Intent; 7 import android.os.Bundle; 8 import android.view.Menu; 9 import android.view.MenuItem; 10 import android.widget.Toast; 11 12 public class OptionMenus_text extends Activity{ 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 // TODO Auto-generated method stub 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.optionmenus); 18 19 } 20 21 22 @Override 23 public boolean onCreateOptionsMenu(Menu menu) { 24 // TODO Auto-generated method stub 25 26 //二、动态添加菜单项 27 MenuItem item = menu.add(1, 100, 1, "菜单一"); 28 //第一个参数:用来分组的id,第二个参数:菜单项的id,第三个参数:排序,第四个参数:菜单项文字描述 29 item.setTitle("标题"); 30 item.setIcon(R.drawable.icon_72);//api>=11不显示图片 31 menu.add(1, 101, 1, "菜单二"); 32 menu.add(1, 102, 1, "菜单三"); 33 menu.add(1, 103, 1, "菜单四"); 34 return true; 35 36 } 37 38 //点击事件 39 40 @Override 41 public boolean onOptionsItemSelected(MenuItem item) { 42 // TODO Auto-generated method stub 43 //根据菜单项id执行响应事件 44 switch (item.getItemId()) { 45 46 47 //动态菜单判断Id,id为第二个参数 48 case 100: 49 Toast.makeText(OptionMenus_text.this, "点击了菜单一", 1).show(); 50 break; 51 case 101: 52 Toast.makeText(OptionMenus_text.this, "点击了菜单二", 1).show(); 53 break; 54 case 102: 55 Toast.makeText(OptionMenus_text.this, "点击了菜单三", 1).show(); 56 break; 57 case 103: 58 Intent intent = new Intent(); 59 intent.setClass(this, AlertDialog_text.class); 60 item.setIntent(intent); //菜单项创建activity的方法 61 break; 62 63 default: 64 break; 65 } 66 67 return super.onOptionsItemSelected(item); 68 69 } 70 }
效果图: