两种方式:
一、通过按钮监听来完成
bt.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
menu.setHeaderTitle("title");
menu.add(0, 1, 0, "item 1");
menu.add(0, 2, 0, "item 2");
}
});
二、通过系统接口openOptionsMenu来完成
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bt = (Button)findViewById(R.id.Button01);
bt.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "test");
return super.onCreateOptionsMenu(menu);
}
@Override
public void openOptionsMenu() {
// TODO Auto-generated method stub
super.openOptionsMenu();
}
@Override
public void onClick(View v) {
int id = v.getId();
switch(id){
case R.id.Button01:
openOptionsMenu(); //这里可以直接通过button调出按键menu的菜单
break;
}
其实还有一种更为简单的方式:
把权限配单AndroidManifest.xml里的android:targetSdkVersion设置为10,这样就可以完美的支持那些没有menu键的设备。
===============================================================================================================================
/设置窗体全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//设置窗体始终点亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
//设置窗体背景模糊
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
通过getWindow().setFlags(0x08000000, 0x08000000);来设置隐藏的menu键盘
===================== 给Android4.0以上系统加上虚拟菜单按键=====================================一、关于某些Android手机上的虚拟按键的显示问题:
在某些只有在显示屏上显示虚拟按键的手机上,有些应用的menu键不能显示出来。在PhoneWindow.generateLayout函数中有如下代码:
- final int targetSdk = context.getApplicationInfo().targetSdkVersion;
- final boolean targetPreHoneycomb = targetSdk < android.os.Build.VERSION_CODES.HONEYCOMB;
- final boolean targetPreIcs = targetSdk < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH;
- final boolean targetHcNeedsOptions = context.getResources().getBoolean(
- com.android.internal.R.bool.target_honeycomb_needs_options_menu);
- final boolean noActionBar = !hasFeature(FEATURE_ACTION_BAR) || hasFeature(FEATURE_NO_TITLE);
- if (targetPreHoneycomb || (targetPreIcs && targetHcNeedsOptions && noActionBar)) {
- addFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);
- } else {
- clearFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);
- }
1.targetPreHoneycomb = targetSdk < android.os.Build.VERSION_CODES.HONEYCOMB;
即android:targetSdkVersion="xxx" xxx小于11
2.android:targetSdkVersion 为11,12或者13,且该activity没有title和actionBar。
可能android希望我们以后使用actionBar代替menu键。
针对activity不能显示menu键的问题,
1.大家可以修改targetSDK,并去掉actionbar和title。
2.在 xxxActivity的哦你Create函数中,setContentView之后调用 Window.getFlags()来强行设置menu键的可见性。如:
- xxxActivity.java
- public void onCreate()
- {
- ....
- setContentView(R.layout.oppo_player);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY,
- WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);
- ...
- }
注:getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY, WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);
如果报错的话,则改为下面语句(我的编译环境下报错,所以是通过下面方式调用的,已测试通过)
getWindow().setFlags(0x08000000, 0x08000000);
二、有时候应用需要使用菜单按钮,但是有的机型没有实体按键,同时4.0以上系统又没有右下角那个虚拟菜单按钮(就是3个点的按钮),这个告诉大家添加的方法。
在onCreate设置这么一段代码:
- try {
- getWindow().addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null));
- }catch (NoSuchFieldException e) {
- // Ignore since this field won't exist in most versions of Android
- }catch (IllegalAccessException e) {
- Log.w("feelyou.info", "Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e);
- }