Android Menuitem 各种坑

fqjm1989 7年前
   <p>ToolBar上添加Menu,除搜索图标外其他的都收起来。修改ToolBar背景色为深灰色,然后才发现MenuItem里面的背景色还是原来白色。</p>    <p>修改颜色后,ToolBar为深灰,有搜索和菜单图标</p>    <p><img src="https://simg.open-open.com/show/5f8de16bece8fc78e71d8592a5eee103.png"></p>    <p>toolbar.png</p>    <p>打开菜单后</p>    <p><img src="https://simg.open-open.com/show/d5bad14584fdb8ce3ac8fa7e59cba90b.png"></p>    <p>overflow.png</p>    <h2>修改MenuItem背景颜色</h2>    <p>原来 res/values/styles.xml 的配置</p>    <pre>  <code class="language-xml"><resources>        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">          <item name="colorPrimary">@color/colorWeChatGray</item>          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>          <item name="colorAccent">@color/colorAccent</item>      </style>    </resources></code></pre>    <p>修改后</p>    <pre>  <code class="language-xml"><resources>        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">          <item name="colorPrimary">@color/colorWeChatGray</item>          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>          <item name="colorAccent">@color/colorAccent</item>          <item name="actionOverflowMenuStyle">@style/optionMenu</item>      </style>        <style name="optionMenu" parent="Widget.AppCompat.ActionBar.Overflow">          <item name="android:popupBackground">@color/colorWeChatGray</item>      </style>    </resources></code></pre>    <p>这样MenuItem的背景颜色就修改了</p>    <p><img src="https://simg.open-open.com/show/8a052b6c75e34f8e1de02cf0a9ab00ca.png"></p>    <p>bg_overflow.png</p>    <p>但这看起来明显不对劲:</p>    <ul>     <li>菜单把ToolBar的两个图标遮住</li>     <li>背景色改变后和文字颜色不协调</li>    </ul>    <h2>修改文字颜色</h2>    <p>我们先处理文字的颜色,添加 android:textColor 和对应的颜色即可</p>    <pre>  <code class="language-xml"><resources>        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">          <!-- Customize your theme here. -->          <item name="colorPrimary">@color/colorWeChatGray</item>          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>          <item name="colorAccent">@color/colorAccent</item>          <item name="actionOverflowMenuStyle">@style/optionMenu</item>          <item name="android:textColor">@color/colorWhite</item>      </style>        <style name="optionMenu" parent="Widget.AppCompat.ActionBar.Overflow">          <item name="android:popupBackground">@color/colorWeChatGray</item>      </style>    </resources></code></pre>    <p><img src="https://simg.open-open.com/show/732c9dc58345440d7be70cde286b4b1f.png"></p>    <p>bg_text_overflow.png</p>    <h2>遮蔽ToolBar图标</h2>    <p>遮蔽图标的问题比较好解决,</p>    <p>把 parent="Widget.AppCompat.ActionBar.Overflow"> 的 .Overflow 去掉</p>    <p><img src="https://simg.open-open.com/show/e84d401afee8fae44dfbcb4e9e41fa30.png"></p>    <p>bg_text_good.png</p>    <h2>MenuItem图标显示</h2>    <p>上面的图片中MenuItem的Icon本来是不显示的,需要加入以下代码。在Android 5.0手机上测试可以用,Android 4.4及之前的还不清楚。</p>    <pre>  <code class="language-java">@Override  protected boolean onPrepareOptionsPanel(View view, Menu menu) {      if (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) {                  Log.e(getClass().getSimpleName(), "onMenuOpened...Unable to set icons for overflow menu", e);              }          }      }      return super.onPrepareOptionsPanel(view, menu);  }</code></pre>    <p> </p>    <p>来自:http://www.jianshu.com/p/c2973461b30e</p>    <p> </p>