为系统菜单添加图标--------暴力反射

 1 import java.lang.reflect.Method;
 2
 3 import android.os.Bundle;
 4 import android.provider.Settings;
 5 import android.app.Activity;
 6 import android.content.Intent;
 7 import android.view.Menu;
 8 import android.view.MenuItem;
 9 import android.widget.TextView;
10
11 public class MainActivity extends Activity {
12     private  TextView textView;
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17
18         textView = (TextView) findViewById(R.id.textView);
19     }
20     //创建系统菜单
21     //menu接收的是系统创建的菜单对象
22     @Override
23     public boolean onCreateOptionsMenu(Menu menu) {
24         setIconEnable(menu,true);//让菜单项显示图标
25         // 创建系统菜单
26         getMenuInflater().inflate(R.menu.main, menu);
27         return true;
28     }
29     //选择系统菜单中某个菜单项的事件监听
30     //item接收的是被选择的菜单项对象
31     @Override
32     public boolean onOptionsItemSelected(MenuItem item) {
33         // TODO 添加事件监听
34         switch(item.getItemId())
35         {
36         case R.id.action_settings:
37             startActivity(new Intent(Settings.ACTION_SETTINGS));
38             break;
39         case R.id.action_add:
40             textView.setTextSize(textView.getTextSize()+5);
41             break;
42         case R.id.action_sub:
43             textView.setTextSize(textView.getTextSize()-5);
44             break;
45         }
46         return super.onOptionsItemSelected(item);
47     }
48
49
50     //为系统菜单项添加图标
51     //enable为true时,菜单添加图标有效,enable为false时无效。4.0+系统默认无效
52         private void setIconEnable(Menu menu, boolean enable)
53         {
54             try
55             {
56                 Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
57                 Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
58                 m.setAccessible(true);
59                 //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)
60                 m.invoke(menu, enable);
61
62             } catch (Exception e)
63             {
64                 e.printStackTrace();
65             }
66         }
67
68
69
70 }

MainActivity

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 2    <!--
 3      一个item就是一个菜单项,android:showAsAction="never"属性设置是否是动作项
 4        动作项:
 5     -->
 6     <item
 7         android:id="@+id/action_settings"
 8         android:orderInCategory="100"
 9         android:icon="@android:drawable/ic_menu_help"
10         android:showAsAction="never"
11         android:title="@string/action_settings"/>
12     <item
13         android:id="@+id/action_add"
14         android:orderInCategory="101"
15         android:icon="@android:drawable/ic_menu_add"
16         android:showAsAction="never"
17         android:title="放大字体"/>
18     <item
19         android:id="@+id/action_sub"
20         android:orderInCategory="101"
21         android:icon="@android:drawable/ic_menu_delete"
22         android:showAsAction="never"
23         android:title="缩小字体"/>
24
25 </menu>

menu_main

时间: 2024-10-12 22:45:06

为系统菜单添加图标--------暴力反射的相关文章

001在系统菜单中添加菜单项

技术要点: 为了操作系统菜单,先要获取系统菜单指针,可以通过GetSystemMenu函数实现,然后利用菜单指针添加一个菜单项,最后在对话框OnSysCommand方法中处理菜单项的命令. GetSystemMenu方法用于获取一个系统菜单的指针,语法如下: CMenu* GetSystemMenu(BOOL bRect); bRect:FALSE时,该方法返回当前正在使用的系统菜单:TRUE时,该方法将重新设置系统菜单到默认状态,并且方法返回值不可用. 实现过程: (1)新建一个基于对话框的应

mfc 小程序---在系统菜单中添加菜单项

1建立一个对话框工程:在dlg类里定义一个菜单指针m_pMenu,在对话框OnInitDialog函数里添加代码: m_pMenu=GetSystemMenu(FALSE);//获取系统菜单的指针 m_pMenu->AppendMenu(MF_SEPARATOR);//添加分割线 m_pMenu->AppendMenu(MF_STRING,IDI_PECULIARMENU,"系统菜单"); 补充:IDI_PECULIARMENU 为一个常数,需要在Resourece.h中宏

Delphi在系统菜单中添加菜单项

unit dy219; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure sysmenu(var msg: twmmenuselect);message wm_syscommand;

Delphi 在系统菜单中添加菜单项

1 unit Unit001; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs; 8 9 type 10 TForm1 = class(TForm) 11 procedure FormCreate(Sender:TObject

android菜单创建的两种方式和菜单项添加图标

    菜单创建的两种方式:     1.在xml文件中创建菜单: 具体代码: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.xunfang.menucreate.MainActivity" > //此处创建子菜单 <

Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

Delphi在系统菜单中添加删除系统菜单项 Delphi在系统菜单中添加删除系统菜单项,利用Windows提供的API函数GetSystemMenu可以得到窗口的系统菜单句柄,再通过AppendMenu和DeleteMenu就可以添加和删除菜单了. 工具/原料 Delphi7 Windows电脑 方法/步骤 打开Delphi7,创建新的工程,默认新窗体的Name属性为Form1   在Form1的Object Inspector中Events里双击OnCreate为Form1创建OnCreate

mfc添加系统菜单

在OnInitDialog()函数里,mfc对系统菜单进行了处理,要想对你的程序增加属于你自己的系统菜单,可在其基础上进行修改,最后在进行响应. 具体步骤如下: (1)定义属于自己的系统菜单ID,此ID必须<0xF000,这样才不会跟系统使用的ID产生冲突. #define IDM_SYS_SELF 1 (2)在OnInitDialog里面增加如下红色内容: ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBO

给Notepad++ 加右键菜单带图标

从网上下载下来的Notepad++ http://download.tuxfamily.org/notepadplus/6.3.3/npp.6.3.3.bin.zip 解压之后,可以直接使用, 但是右键菜单中没有它,非常不方便, 本文使用三种方式给Notepad++注册右键菜单功能,他们只有稍微的区别: 方式一: 如下建立一个reg文件,拷贝如下内容并替换相关路径,  保存,双击运行加入注册表就好了. Windows Registry Editor Version 5.00 [HKEY_CLAS

【转】Android 系统菜单与自定义菜单

Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java [java] view plaincopy package com.wxz.menu; import com.wxz.menu.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.Men