android之菜单实现

范例说明:

     本文着重介绍下menu的创建,上下文菜单,子菜单,选项菜单, onCreateContextMenu,onCreateOptionsMenu,onContextItemSelected,onOptionsItemSelected前两个方法用于重写创建菜单选项

,后两个方法介绍菜单选择后的事件。

运行效果如图:

       上下文菜单                                                                       选项菜单

一:首先看下布居res/layout/main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/context_menu"
    android:id="@+id/context_menu"
    />
<TextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="@string/sub_menu"
     android:id="@+id/sub_menu"
     />
</LinearLayout>

二:res/values/strings.xml

<resources>
   
    <string name="app_name">android之菜单</string>
<string name="context_menu">上下文菜单</string>
<string name="sub_menu">多级上下文菜单</string>
</resources>

三:代码分析 main.java

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.SubMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


public class menu extends Activity{
    private TextView context_menu,sub_menu;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //context_menu注册上下文菜单(长按呼出上下文菜单)
        context_menu=(TextView)findViewById(R.id.context_menu);
        this.registerForContextMenu(context_menu);
        //sub_context注册多级上下文菜单
        sub_menu=(TextView)findViewById(R.id.sub_menu);
        this.registerForContextMenu(sub_menu);
    }
 // 重写 onCreateContextMenu 用以创建上下文菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
       
        if(v==context_menu){
            menu.setHeaderTitle("上下文菜单");
             // 第一个参数:组ID
            // 第二个参数:菜单项ID
            // 第三个参数:顺序号
            // 第四个参数:菜单项上显示的内容

            menu.add(1,0,0,"菜单一");
            menu.add(1,1,1,"菜单二");
            menu.add(1,2,3,"菜单三").setCheckable(true);
   
        }
        // ContextMenu.addSubMenu("菜单名称") - 用来添加子菜单。子菜单其实就是一个特殊的菜单
        else if(v==sub_menu){
            menu.setHeaderTitle("多级上下文菜单");
            SubMenu sub=menu.addSubMenu("父菜单一");
            sub.add(0,0,0,"菜单一");
            sub.add(0,1,1,"菜单二");
            sub.setGroupCheckable(0, true, true);
            SubMenu sub2=menu.addSubMenu("父菜单二");
            sub2.add(1,0,0,"菜单三");
            sub2.add(1,1,1,"菜单四");
            sub2.setGroupCheckable(1, true, false);
        }
       
    }
    // 重写 onContextItemSelected用以响应上下文菜单
    @Override
    public boolean onContextItemSelected(MenuItem item){
        super.onContextItemSelected(item);
         Toast.makeText(this,  String.valueOf(item.getTitle()), Toast.LENGTH_SHORT).show();
         return false;
    }
    // 重写 onCreateOptionsMenu 用以创建选项菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        // setIcon() - 设置菜单项的图标
        // setAlphabeticShortcut() - 设置选中此菜单项的快捷键
        // 注:菜单项超过 6 个的话,第 6 个菜单将会变为  More 菜单,多余的菜单会在单击 More 菜单之后显示出来
        menu.add(0, 0, 0, "菜单1").setIcon(R.drawable.icon);
        menu.add(0, 1, 1, "菜单2");
        menu.add(0, 2, 2, "菜单3").setAlphabeticShortcut('a');
        menu.add(0, 3, 3, "菜单4");
        menu.add(0, 4, 4, "菜单5");
        menu.add(0, 5, 5, "菜单6");
        menu.add(0, 6, 6, "菜单7");
        menu.add(0, 7, 7, "菜单8");

        return true;
    }
  
   
 // 重写 onOptionsItemSelected 用以响应选项菜单
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
       
        Toast.makeText(this, String.valueOf(item.getTitle()), Toast.LENGTH_SHORT).show();

        return false;
    }
  }

原文地址:https://www.cnblogs.com/stulife/p/1804492.html