2015-06-25 76 views
1

當我試圖接近顯示菜單操作的圖標,但由於某種原因,我不能當我使用AppCompatActivity /程序兼容性主題,以顯示他們..菜單圖標顯示不使用程序兼容性主題

我只得到文本。

我試過如下:

@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(NoSuchMethodException e) 
        { 
         Log.e("Menu:", "onMenuOpened", e); 
        } 
        catch(Exception e) 
        { 
         throw new RuntimeException(e); 
        } 
       } 
      } 
      return super.onMenuOpened(featureId, menu); 
     } 

還是一樣:(

下面是菜單項(menu.xml文件):

menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.ylx.tools.MainActivity"> 

    <item 
     android:id="@+id/action_login" 
     android:icon="@drawable/ic_action_person" 
     android:orderInCategory="100" 
     android:title="@string/action_login"/> 
    <item 
     android:id="@+id/action_wishlist" 
     android:icon="@drawable/ic_action_favorite" 
     android:orderInCategory="100" 
     android:title="@string/action_wish"/> 
    <item 
     android:id="@+id/action_track_order" 
     android:icon="@drawable/ic_action_place" 
     android:orderInCategory="100" 
     android:title="@string/action_track"/> 
    <item 
     android:id="@+id/action_rate_the_app" 
     android:icon="@drawable/ic_action_important" 
     android:orderInCategory="100" 
     android:title="@string/action_rate"/> 
    <item 
     android:id="@+id/action_share_app" 
     android:icon="@drawable/ic_action_share" 
     android:orderInCategory="100" 
     android:title="@string/action_share"/> 
    <item 
     android:id="@+id/action_contact_us" 
     android:icon="@drawable/ic_action_phone" 
     android:orderInCategory="100" 
     android:title="@string/action_contact"/> 
    <item 
     android:id="@+id/action_policies" 
     android:icon="@drawable/ic_action_about" 
     android:orderInCategory="100" 
     android:title="@string/action_policies"/> 

    <item 
     android:id="@+id/action_cart" 
     android:title="@string/action_cart" 
     android:actionLayout="@layout/cart" 
     android:orderInCategory="9999999" 
     android:icon="@drawable/empty_cart_final" 
     app:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_fav" 
     android:title="@string/action_fav" 
     android:actionLayout="@layout/wishlist_list" 
     android:icon="@drawable/fav_final" 
     app:showAsAction="always" /> 
</menu> 

工具欄在導航僅創建Drawer.xml

​​

toolbar.xml有以下幾點:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

這裏是我使用的風格主題:

<resources> 

    <style name="Theme.ylg" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimaryDark">#004D40</item> 
    <item name="colorPrimary">#00695C</item> 
    <item name="android:textColorPrimary">#fdfff2</item> 
    <item name="android:windowBackground">@android:color/white</item> 
    <item name="android:editTextColor">@android:color/background_dark</item> 
    <item name="android:textColor">@android:color/background_dark</item> 
    <item name="colorControlNormal">@android:color/background_dark</item> 
    <item name="colorControlActivated">#ff0043c5</item> 
    <item name="colorControlHighlight">#00695C</item> 
    </style> 

    <style name="Theme.ylg.NoTitle" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="windowNoTitle">true</item> 
    </style> 
</resources> 

出了什麼問題嗎?我如何顯示圖標?

+0

帖子。你還從AppCompat使用什麼主題? –

+0

@AlokNair:不知道爲什麼你需要oncreate等代碼。無論如何,我已經加入他們。讓我知道你還想要什麼? – TheDevMan

+0

你是說,你沒有得到ActionBar上的圖標? –

回答

7

對於AppCompatActivity,您可以將此檢查放在onPrepareOptionsPanel()上。

@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); 
    } 
+0

嘿!它工作正常..謝謝! – TheDevMan

+0

@TheDevMan yw :) –

0

感謝! 也,放在onPrepareOptionsMenu(菜單菜單)的代碼是好的, 喜歡你的活動的onCreate和XML代碼的工具欄包含此

@Override 
public boolean onPrepareOptionsMenu(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.onPrepareOptionsMenu(menu); 
    }