簡體   English   中英

菜單中的圖標未在android中顯示

[英]icon in menu not showing in android

我想向我的項目添加菜單處理程序。 我也閱讀了http://developer.android.com/guide/topics/ui/menus.html ,它非常簡單,但沒有顯示圖標。 我很困擾。 我什至以編程方式添加了一個菜單項。

我的代碼是:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 0, 0, "Quit").setIcon(R.drawable.ic_launcher);
    getMenuInflater().inflate(R.layout.menu, menu);
    return true;
}

並在 xml 中:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Single menu item 
         Set id, icon and Title for each menu item 
    -->
    <item android:id="@+id/menu_bookmark" 
          android:icon="@drawable/update"
          android:title="@string/Update" />

</menu>

經過長時間的嘗試,我找到了以下解決方案,這可能會幫助其他人節省時間。 基本上是“lbarbosa”提供的解決方案,我要衷心感謝他。

根據之前的答案進行了嘗試,它工作正常,至少在支持庫(25.1)的更新版本中是這樣的:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    if(menu instanceof MenuBuilder){
        MenuBuilder m = (MenuBuilder) menu;
        m.setOptionalIconsVisible(true);
    }

    return true;
}

如果您在 Android 3.0+ 上運行代碼,則菜單中的圖標不會按設計顯示。 這是谷歌的設計決定。

你可以閱讀更多關於它在這個關於Android開發者博客。

無論系統在何處做出何種設計選擇,您都可以使用此問題的最高投票答案中提供的解決方案來規避此問題

為了完整性,下面的代碼。 android.support.v7.app.ActionBarActivity上測試工作

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

老問題,但希望它會幫助某人。

使用以下代碼:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/menu_item_share"
    android:title="Share"
    app:showAsAction="always"
    android:icon="@drawable/share" /></menu>

注意我使用app:showAsAction而不是android:showAsAction

您可以將屬性android:showAsAction="always"添加到您的 XML 文件中的 item 元素中。 然后它會將相關菜單選項顯示為操作欄中的圖標。

請注意,它將代替菜單中的文本。

如需進一步閱讀,請在android:showAsAction下查看此處

忘記所有這些,做這一步。 app:showsAsAction="always"到您的項目。 如果您使用android:showsAsAction="always"您將無法獲得解決方案。 嘗試為您的項目添加 app 屬性。

/* menu code */   
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <item android:id="@+id/one" android:title="one"
            android:icon="@mipmap/ic_launcher" app:showAsAction="always" />
        <item android:id="@+id/two" android:title="two"
            android:icon="@mipmap/ic_launcher" app:showAsAction="always" />
        <item android:id="@+id/three" android:title="three"
            android:icon="@mipmap/ic_launcher"  />
    </menu>
   /* Java code */

    @SuppressLint("RestrictedApi")
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.mymenu,menu);
            if(menu instanceof MenuBuilder){
                MenuBuilder m = (MenuBuilder) menu;
                m.setOptionalIconsVisible(true);
            }
            return true;
        }

我使用以下代碼在 onCreateOptionsMenu 方法中放置了顯式圖標

for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i);

        if (item.getItemId() == R.id.print) {
            item.setIcon(getDrawable(R.drawable.print));

} }

使用android.support.v7.app.AppCompatActivity ,使圖標的輸入成為一項非常困難的任務。 您需要從AppComactActivity類實現onMenuOpen ,超級方法。 此檢查后,如果菜單不為空。 如果菜單不為空,則傳遞像這樣的 Method 類,並使用布爾值setOptionalIconsVisible為 true。

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

只需在 menu.xml 中的 item 標簽中添加這個 attr

app:showAsAction="always
@Override
public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, 0, 0, "androidDemo").setIcon(R.drawable.ic_launcher);
  getMenuInflater().inflate(R.layout.menu, menu);
  return true;
}

並在 xml 中:

 <item android:id="@+id/menuUpdate"
  android:icon="@drawable/update_icon"
  android:title="@string/Update" 
  android:showAsAction="always"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM