软编码menu

两种方式:

一、通过按钮监听来完成

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,

           WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

 

//设置窗体背景模糊

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
                WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

通过getWindow().setFlags(0x08000000, 0x08000000);来设置隐藏的menu键盘

===================== 给Android4.0以上系统加上虚拟菜单按键=====================================

一、关于某些Android手机上的虚拟按键的显示问题:

在某些只有在显示屏上显示虚拟按键的手机上,有些应用的menu键不能显示出来。在PhoneWindow.generateLayout函数中有如下代码:

[java]  view plain copy
  1. final int targetSdk = context.getApplicationInfo().targetSdkVersion;  
  2.         final boolean targetPreHoneycomb = targetSdk < android.os.Build.VERSION_CODES.HONEYCOMB;  
  3.         final boolean targetPreIcs = targetSdk < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH;  
  4.         final boolean targetHcNeedsOptions = context.getResources().getBoolean(  
  5.                 com.android.internal.R.bool.target_honeycomb_needs_options_menu);  
  6.         final boolean noActionBar = !hasFeature(FEATURE_ACTION_BAR) || hasFeature(FEATURE_NO_TITLE);  
  7.         if (targetPreHoneycomb || (targetPreIcs && targetHcNeedsOptions && noActionBar)) {  
  8.             addFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);  
  9.         } else {  
  10.             clearFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);  
  11.         }  
从这里可以看出,默认情况下,我们的menu键在满足一下条件情况下能显示出来:
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键的可见性。如:

[java]  view plain copy
  1. xxxActivity.java  
  2. public void  onCreate()  
  3. {  
  4. ....  
  5.   setContentView(R.layout.oppo_player);  
  6.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY,  
  7.                             WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);   
  8.   ...  
  9. }  
若是想去掉menu键,而不想改targetSDK,可以在 xxxActivity的哦你Create函数中,setContentView之后调用 Window.clearFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);来强者隐藏menu的三个点图标
注:getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY, WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY); 
如果报错的话,则改为下面语句(我的编译环境下报错,所以是通过下面方式调用的,已测试通过)
getWindow().setFlags(0x08000000, 0x08000000);

二、有时候应用需要使用菜单按钮,但是有的机型没有实体按键,同时4.0以上系统又没有右下角那个虚拟菜单按钮(就是3个点的按钮),这个告诉大家添加的方法。
在onCreate设置这么一段代码:

[java]  view plain copy
  1. try {  
  2.     getWindow().addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null));  
  3. }catch (NoSuchFieldException e) {  
  4.     // Ignore since this field won't exist in most versions of Android  
  5. }catch (IllegalAccessException e) {  
  6.     Log.w("feelyou.info""Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e);  
  7. }  





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值