1. 苏葳的备忘录首页
  2. 移动平台

Android创建菜单的两种方式

android java xml 菜单以前用Visual Studio开发过Windows Mobile程序,感觉非常方便,WM程序的菜单创建跟用VS开发桌面程序一样轻松。而一个Android原生应用就大不一样了。如同activity一样,创建android设备的选项菜单也有代码创建和mvc模式创建,即用xml定义菜单的方式两种。直接创建比较方便:

// public static final int MENU_ITEM_FIRSTPAGE = Menu.FIRST;
// public static final int MENU_ITEM_BACKWARD = Menu.FIRST + 1;
// public static final int MENU_ITEM_ABOUT = Menu.FIRST + 2;
// public static final int MENU_ITEM_PREFERENCES = Menu.FIRST + 3;

上面是定义菜单项ID。

   public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
//  menu.add(0,MENU_ITEM_FIRSTPAGE,0,R.string.menu_firstpage).setShortcut('3','a')
//  .setIcon(android.R.drawable.ic_menu_mylocation);
//  menu.add(0,MENU_ITEM_BACKWARD,0,R.string.menu_backward).setShortcut('4','b')
//  .setIcon(android.R.drawable.ic_menu_revert);
//  menu.add(0,MENU_ITEM_PREFERENCES,0,R.string.menu_preferences).setShortcut('5','c')
//  .setIcon(android.R.drawable.ic_menu_preferences);
//  menu.add(0,MENU_ITEM_ABOUT,0,R.string.menu_about).setShortcut('6','d')
//  .setIcon(android.R.drawable.ic_menu_more);

在onCreateOptionsMenu中添加菜单。第一参数为组ID,第二为菜单ID,R.string.menu_firtstpage为字符串资源,定义菜单显示的文本。setShortcut定义菜单热键,setIcon定义图标资源文件。android.R.drawable.ic_menu_mylocation这些是系统包中预定义的标准图标项,可直接拿来使用。

然后就是设置菜单触发行为:

 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
     switch (item.getItemId()) {
        case MENU_ITEM_FIRSTPAGE: //前面定义的菜单ID
            // Launch activity to insert a new item
//            startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData()));
         WebView wv=(WebView)findViewById(R.id.webkitWebView1);
         wv.getSettings().setBuiltInZoomControls(true);
         wv.getSettings().setDefaultFontSize(10);
         Log.v("MENU_ITEM_FIRSTPAGE", "aaaaa");
            return true;

在onOptionsItemSelected对菜单ID进行判断,并执行相应动作。动作执行完后,需return true;

以菜单配置文件xml方式制作菜单。

首先定义菜单xml文件:

在res下创建menu目录。此时在包管理器中点右键,创建:其它:android xml文件,此时xml文件的类型会默认为menu。打开文件,可对其进行添加菜单项操作。

文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:id="@+id/MENUGRP">
        <item android:title="@string/menu_firstpage" android:id="@+id/MENU_ITEM_FIRSTPAGE" android:icon="@android:drawable/ic_menu_mylocation"></item>
        <item android:title="@string/menu_backward" android:id="@+id/MENU_ITEM_BACKWARD" android:icon="@android:drawable/ic_menu_revert"></item>
        <item android:title="@string/menu_preferences" android:id="@+id/MENU_ITEM_PREFERENCES" android:icon="@android:drawable/ic_menu_preferences"></item>
        <item android:title="@string/menu_about" android:id="@+id/MENU_ITEM_ABOUT" android:icon="@android:drawable/ic_menu_more"></item>
    </group>
</menu>

基本对应于代码方式创建菜单项时的id,标题,图标等等。然后在:

public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);

中生成菜单。最后是在:

public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
     switch (item.getItemId()) {
        case R.id.MENU_ITEM_FIRSTPAGE:

中调用菜单响应事件。由于此处菜单ID在资源文件中定义,则可直接用R.id.MENU_ITEM_FIRSTPAGE。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/288.html

发表评论

邮箱地址不会被公开。 必填项已用*标注