Android 菜单, option menu 和 context menu (右键菜单)

1. 菜单分为option menu 和 context menu (右键菜单)

创建菜单的方式有两种: 通过xml配置  和  代码生成

菜单的样式 4.0 后有变化,如果要回到之前2.x的样式可以配置activity的属性 android:theme="@android:style/Theme"

4.0后的菜单不能设置icon , 可以通过实例中的方法设置

option menu 只需创建 和 监听事件, context在创建之前需要在某一个view上注册


MainActivity.java

package com.example.menu_actionbar;

import java.lang.reflect.Method;
import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class MainActivity extends ListActivity {

	private String[] colors = {"red", "green", "blue"};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, colors);
		setListAdapter(adapter);
		
		//ContextMenu 右键菜单效果, 使用前先注册到对应的View, 一般在ListView上使用
		registerForContextMenu(getListView());
	}
	
	//Context Menu, 创建 和 事件响应
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		getMenuInflater().inflate(R.menu.main, menu);
		setIconEnable(menu, true);
		super.onCreateContextMenu(menu, v, menuInfo);
	}
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		//info知道是点击的哪个listview
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
		switch (item.getItemId()) {
		case R.id.menu_settings:
			Toast.makeText(this, "click setting item, "+info.position, Toast.LENGTH_SHORT).show();
			break;
		case R.id.menu_call:
			Toast.makeText(this, "click call item"+info.position, Toast.LENGTH_SHORT).show();
			break;
		case R.id.menu_edit:
			Toast.makeText(this, "click edit item"+info.position, Toast.LENGTH_SHORT).show();
			break;
		default:
			break;
		}
		return super.onContextItemSelected(item);
	}
	
	//OptionsMenu
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//方式一: 通过xml配置menu
		getMenuInflater().inflate(R.menu.main, menu);
		setIconEnable(menu, true);
		
		//方式二: 代码添加
		//menu.add(0, 1, Menu.NONE, "Send");
		//SubMenu subMenu = menu.addSubMenu(0, 2, Menu.NONE, "Edit");
		//subMenu.add(1, 21, 1, "Edit1");
		//subMenu.add(1, 22, 2, "Edit2");
		
		//add 方法的参数
		//groupId,组别,用来划分itemid的。一般为Menu.NONE
		//itemId,ID。是menu识别编号,供识别menu用的,很重要
		//order,顺序。这个参数的大小决定菜单选项出现的先后顺序。顺序按照参数由小到大
		//title,显示文本
		
		return true;
	}

	//OptionsMenu item被选中的触发事件 
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
		return super.onOptionsItemSelected(item);
	}
	

	// 4.0 后不能设置icon的原因是 MenuBuilder中默认的setOptionalIconsVisible被设置false	
	private void setIconEnable(Menu menu, boolean enable)
    {
    	try 
    	{
			Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
			Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
			m.setAccessible(true);
			//MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)
			m.invoke(menu, enable);
		} catch (Exception e) 
		{
			e.printStackTrace();
		}
    }
	
	

}
res/menu/main.xml  菜单配置

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"
        android:icon="@android:drawable/ic_menu_set_as" />
         
    <item 
        android:menuCategory="container"
        android:id="@+id/menu_edit"
        android:title="Edit"
        android:icon="@android:drawable/ic_menu_edit">
        
        <menu>
            <item android:title="Edit title" android:visible="true" android:enabled="true"/>
            <item android:title="Edit text"  android:visible="true" android:enabled="true"/>
        </menu>
        
    </item>
    
    <item 
        android:id="@+id/menu_call"
        android:title="Call"
        android:icon="@android:drawable/ic_menu_call"/>

</menu>




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装:解压后运行exe,点【添加到系统右键菜单】 安卓右键工具v1.2版本使用说明 安卓右键工具是一款集合复制路径,Dex转Jar,Manifest和AXML查看,APK相关信息提取、优化、签名、反编译、回编译,手机信息查看、屏幕截图等功能的综合型工具,同时本工具拥有自定义插件功能,方便使用者对本工具的功能进行扩充。 一、运行环境 Windows操作系统64位 需安装Java开发环境并配置环境变量 需安装Python并配置环境变量,支持Python3和Python2 需安装ADB并配置环境变量 二、安装和卸载说明 1、安装 运行APKmenuTOOL.exe,点击“添加到系统右键菜单”,安装完毕。默认安装路径为D:\APKmenuTOOL。 2、卸载 运行APKmenuTOOL.exe,点击“从系统右键菜单移除”,卸载完毕。文件目录请手动删除。 三、使用方法 使用该工具时需选中文件,右击,在弹出的菜单项中选择安卓右键工具,然后选择需要使用的功能即可。 四、功能说明 1、复制路径 复制被选中文件的路径(全文件路径,支持多个文件)到剪贴板,执行结果将在右下角冒泡提示。 2、Dex->Jar 将dex(或APK中的dex)文件转为jar文件。任务完成时会在当前目录下生成文件名为源文件名的jar文件,并自动使用jd-gui打开所生成的jar文件。执行结果将在右下角冒泡提示。 3、Manifest->TXT|AXML->XML 自动提取APK文件中的AndroidManifest.xml文件内容(若为AXML文件则直接提取文件内容),以TXT文件格式保存到当前目录,并自动打开生成的TXT文件。执行结果将在右下角冒泡提示。 4、查看APK信息 自动提取APK文件中软件名称、包名、版本、启动Activity、权限列表等信息。任务完成时自动显示获取的信息,执行结果将在右下角冒泡提示。 5、查看签名信息 自动提取APK文件的签名信息,任务完成时在当前目录下生成文件名为”源文件名_signinfo“的文本文件,,并自动打开生成的TXT文件。执行结果将在右下角冒泡提示。 6、签名 对选中的APK文件进行签名。默认使用debug签名,签名文件可以自由配置,路径为D:\APKmenuTOOL\tools\sign。任务完成时将在当前目录下生成文件名为“源文件名”的APK文件和文件名为“源文件名_sign”的log文件。执行结果将在右下角冒泡提示。 7、安装(卸载安装) 自动卸载被选中APK,然后将该APK安装到手机。使用该功能时,请先连接手机设备。执行结果将在右下角冒泡提示。 8、安装(替换安装) 将被选中APK覆盖安装到手机。使用该功能时,请先连接手机设备。执行结果将在右下角冒泡提示。 9、卸载 从手机中卸载被选中APK文件。使用该功能时,请先连接手机设备。执行结果将在右下角冒泡提示。 10、查看加壳信息 检测APK文件是否被加壳,若被加壳则检测加壳厂家。任务完成时自动显示获取的信息,执行结果将在右下角冒泡提示。 11、 APK深度检测 自动检测APK文件是否是游戏APP和是否为XPOSED插件。如果为游戏APP则显示游戏引擎,如果为XPOSED插件APP则显示入口类。 12、查看手机信息 自动获取手机类型、系统版本、系统API版本、系统CPU类型、序列号、IMEI、分辨率等信息,任务完成后将自动显示获取到的手机信息,使用该功能时请先连接手机设备。执行结果将在右下角冒泡提示。 13、手机截图 对手机当前画面进行截图,任务完成时会在当前目录下生成screenshot.png,同时复制截图至剪贴板。执行结果将在右下角冒泡提示。 14、提取图标 提取源文件APK中的图标,任务完成时会在当前目录下生成APK中所有分辨率的目标文件。执行结果将在右下角冒泡提示。 15、zipalign优化 对源文件进行优化,使程序运行更快。任务完成时会在当前目录下生成文件名为“源文件名_align”的APK文件。执行结果将在右下角冒泡提示。 16、反编译 对被选中APK进行反编译。任务完成时会在当前目录下生成和被选中APK名字一样的文件夹。执行结果将在右下角冒泡提示。 17、回编译 对反编译后的APK文件夹进行回编译得到APK文件。任务完成时会在当前目录下生成编译后的APK文件。执行结果将在右下角冒泡提示。 18、提取so 提取被选中APK中lib目录下的所有后缀为so的文件。任务完成时会在当前目录下生成名为“源文件名_lib”的文件夹。执行结果将在右下角冒泡提示。 1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值