关于ActionBar的几个小细节的解决方案

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuyi1207164339/article/details/50290367

1、当我们点击我们手机上的菜单键时,Android默认是在底部弹出菜单项!但是如果我们还是想在ActionBar的溢出菜单弹出菜单项的话,就可以使用下面定义的方法。

private void forceShowActionBarOverflowMenu() { 
                try { 
                    ViewConfiguration config = ViewConfiguration.get(this); 
                    Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); 
                    if (menuKeyField != null) { 
                        menuKeyField.setAccessible(true); 
                        menuKeyField.setBoolean(config, false); 
                    } 
                } catch (Exception e) { 
                    e.printStackTrace(); 
                } 
            }

然后在setContentView(R.layout.activity_action_bar_main)之后调用forceShowActionBarOverflowMenu()就可以达到预期的效果。

2、Android的ActionBar默认的溢出菜单是不能显示图标的,可以通过以下方法达到目的。通过重写onMenuOpened方法,使用反射机制来使得菜单项能够显示图标。

@Override 
  public boolean onMenuOpened(int featureId, Menu menu) { 
      if (featureId == Window.FEATURE_ACTION_BAR && menu != null) { 
          if (menu.getClass().getSimpleName().equals("MenuBuilder")) { 
              try { 
                  Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); 
                  m.setAccessible(true); 
                  m.invoke(menu, true); 
              } catch (Exception e) { 
              } 
          } 
      } 
      return super.onMenuOpened(featureId, menu); 
  }    


展开阅读全文

strcpy的几个细节

11-12

非常多公司用这个函数考察应聘者的一些技能,如代码风格、代码成熟度等。 rnrn首先要避免国内一些教科书的误导的诸如while(*dest++=*src++)这样的代码。 rnrn我把参考写法如下(纯C代码): rnrn----------------------------------------------------------------------------- rnrn000 rnrn001 # include rnrn002 rnrn003 # define BOUNDS_VIOLATED (__builtin_trap (), 0) rnrn004 rnrn005 # define CHECK_BOUNDS_LOW(ARG) \ rnrn006 (((__ptrvalue (ARG) < __ptrlow (ARG)) && BOUNDS_VIOLATED), \ rnrn007 __ptrvalue (ARG)) rnrn008 rnrn009 # define CHECK_BOUNDS_HIGH(ARG) \ rnrn010 (((__ptrvalue (ARG) > __ptrhigh (ARG)) && BOUNDS_VIOLATED), \ rnrn011 __ptrvalue (ARG)) rnrn012 rnrn013 /* copy src to dest */ rnrn014 char * rnrn015 strcpy ( char *dest, const char *src) rnrn016 rnrn017 register char c; rnrn018 char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src); rnrn019 const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1; rnrn020 size_t n; rnrn021 do rnrn022 c = *s++; rnrn023 s[off] = c; rnrn024 while (c != ’\0’); rnrn025 n = s - src; rnrn026 (void) CHECK_BOUNDS_HIGH (src + n); rnrn027 (void) CHECK_BOUNDS_HIGH (dest + n); rnrn028 return dest; rnrn029 rnrn030 rnrn要注意的有: rnrn1、第003行宏调用的函数为指针越界陷阱系统调用(bounds check,即int $5); rnrn2、第006行的‘&&’和‘,’符号在宏中的用法; rnrn3、数据类型的定义,诸如ptrdiff_t, size_t等的使用; rnrn4、第023的s指针为什么高效,如寄存器使用数量是最少的; rnrn5、第026行为什么要返回void类型 rnrnrn下面那五条我一个也不懂,谁给分析一下 论坛

没有更多推荐了,返回首页